Python读取大型JSON文件的新方法?2010年后高效方案探讨
处理大型JSON文件的高效方案
1. 用标准库实现流式解析
Python标准库的json模块支持流式解码,不用一次性把整个文件加载到内存,从根源避免内存溢出导致的崩溃。核心用JSONDecoder.raw_decode()方法逐段解析:
import json def stream_large_json(file_path, target_key): decoder = json.JSONDecoder() with open(file_path, 'r', encoding='utf-8') as f: buffer = '' for line in f: buffer += line.strip() while buffer: try: obj, idx = decoder.raw_decode(buffer) if target_key in obj: # 遍历目标数组,替换成你的业务逻辑 for item in obj[target_key]: print(item) buffer = buffer[idx:] except ValueError: # 缓冲区内容不完整,继续读取下一行 break # 针对你的场景,读取'item'节点数据 stream_large_json('../Data/response.json', 'item')
2. 用第三方库ijson快速解析
ijson是专门为大型JSON设计的流式解析库,语法更简洁,性能表现更优。先安装依赖:
pip install ijson
结合你的JSON结构,直接定位到item节点读取数据:
import ijson with open('../Data/response.json', 'r', encoding='utf-8') as f: # 'item.item'是JSONPath语法,定位根节点下item数组的每个元素 for item in ijson.items(f, 'item.item'): # 处理单个item数据 print(item)
3. 额外内存优化技巧
- 打开文件时显式指定编码,避免默认编码转换带来的额外内存开销
- 若仅需
item数据,解析时可跳过version字段的加载,进一步减少内存占用 - 处理完临时数据后,用
del关键字及时释放变量内存
内容的提问来源于stack exchange,提问作者OLGJ
相关产品推荐
相关产品推荐

