You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python操作AWS S3:如何正确读取按行存储JSON的文件

S3行存储JSON文件读取异常修复方案

问题根因

boto3调用get_object返回的response['Body']是StreamingBody流式对象,直接遍历该对象是按固定大小的字节块返回内容,不会自动按\n换行符拆分行,因此会出现多行数据被合并到同一个字节块的情况,最终导致JSON解析失败。

修复方案

根据文件体积可以选择两种适配方案:

场景1:文件体积较小(可完全加载到内存)

直接读取全量文件内容后按行拆分解析:

import boto3
import json

s3 = boto3.client('s3')
response = s3.get_object(Bucket=SOURCE_BUCKET, Key=key)
# 读取全量内容解码后按换行拆分
content = response['Body'].read().decode('utf-8')
for line in content.splitlines():
    # 跳过空行避免解析异常
    if line.strip():
        data_json = json.loads(line)

场景2:文件体积较大(需流式读取避免内存溢出)

使用io.TextIOWrapper包装流式对象,实现自动按行迭代:

import boto3
import json
import io

s3 = boto3.client('s3')
response = s3.get_object(Bucket=SOURCE_BUCKET, Key=key)
# 包装为文本IO对象,原生支持按换行符读取行
with io.TextIOWrapper(response['Body'], encoding='utf-8') as f:
    for line in f:
        if line.strip():
            data_json = json.loads(line)

补充说明

流式读取方案的内存占用仅和单行数据长度相关,不会受整个文件大小影响,适用于GB级以上的大文件读取场景。

内容的提问来源于stack exchange,提问作者Alex_Y

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:36:03