python s3 Boto3从大文件中读取N行数/次迭代

2024-05-19 22:46:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python以N行的批处理方式处理s3中一个大文件的所有记录。我必须在每次迭代中获取N行。每行都有一些json对象

以下是我已经尝试过的一些方法:

1) 我尝试了这里提到的解决方案 Streaming in / chunking csv's from S3 to Python 但它在读取字节数据时破坏了我的json结构

2)

obj = s3.get_object(Bucket=bucket_name, Key=fname)
data=obj['Body'].read().decode('utf-8').splitlines()

读取100k行的大文件需要更多的时间。它将返回行列表,我们可以进一步迭代以从数据变量中获取行数


Tags: 文件csv数据对象方法infromjson
2条回答

那些正在寻找类似解决方案的人。我已经利用pandas库在循环中获得了N行

下面是我的代码实现,每次迭代将给出50行代码

for records in pd.read_json(obj['Body'].read().decode('utf-8'), lines=True, chunksize=50):
    print(records)

也许smart_open会起作用

pip install smart_open[s3] 

安装后

from smart_open import open

client = boto3.client("s3")
transport_params = {'client': client}
with open('s3://%s/%s' % (bucket_name, fname), 'wb', transport_params=transport_params, encoding='utf-8') as f:
    for line in f:
        print(json.loads(line))

您也可以使用iter_lines

obj = s3.get_object(Bucket=bucket_name, Key=fname)
for line in obj['Body'].iter_lines(chunk_size=1024, keepends=False):
    print(json.loads(line))

相关问题 更多 >