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

如何在Python中读取每行一个JSON对象的大型GZ压缩JSON文件?

如何在Python中读取大型GZ压缩JSON行文件

嘿,我来帮你搞定这个问题!处理这种每行一个JSON对象的大型GZ压缩文件,核心原则是逐行流式处理——绝对别一次性把整个文件塞进内存,不然分分钟给你整个内存溢出错误。下面给你两种实用的方案,按需选择:

方法一:用Python内置模块(无需额外安装)

Python自带的gzip和json模块就能搞定大部分场景,代码简单易懂,内存占用也低:

import gzip
import json

# 用文本模式打开GZ文件,指定编码避免乱码
with gzip.open('your_large_file.json.gz', 'rt', encoding='utf-8') as gz_file:
    for line_num, line in enumerate(gz_file, 1):
        # 跳过空行,避免解析空字符串报错
        stripped_line = line.strip()
        if not stripped_line:
            continue
        
        try:
            # 把单行JSON解析成Python字典
            json_obj = json.loads(stripped_line)
            # 这里写你的业务逻辑,比如提取字段、写入数据库等
            print(f"第{line_num}行的客户ID: {json_obj['ID_CLIENTE']}")
        except json.JSONDecodeError as e:
            # 捕获解析错误,避免程序直接崩溃
            print(f"第{line_num}行解析失败: {str(e)}")

这个方案的优点是零依赖,适合文件大小在内存可承受范围内的场景,逐行处理的内存占用几乎可以忽略。

方法二:用ijson处理超大型文件(内存友好)

如果你的文件大到离谱(比如几个GB甚至更大),用ijson这种流式JSON解析库会更稳妥——它不会一次性加载整个JSON对象,而是边读边解析,内存占用极低。

首先需要安装ijson:

pip install ijson

然后是代码示例:

import gzip
import ijson

# 注意这里要用二进制模式打开(rb),因为ijson需要处理字节流
with gzip.open('your_large_file.json.gz', 'rb') as gz_file:
    # multiple_values=True表示文件里有多个独立的JSON对象(每行一个)
    for obj in ijson.items(gz_file, '', multiple_values=True):
        # 处理每个解析后的字典对象
        print(f"出发地: {obj['ORIGEN']}, 价格: {obj['PRECIO']}")

这个方案适合极端大文件场景,哪怕文件比你的内存还大,也能平稳处理。

一些额外的小提示

  • 编码问题:一定要指定正确的编码(比如utf-8),不然很容易出现乱码或者解析失败的情况。
  • 异常处理:务必加上try-except捕获解析错误,毕竟大型文件难免会有格式不规范的行,提前处理能避免程序中途崩溃。
  • 性能优化:如果处理速度慢,可以考虑用多进程(比如concurrent.futures),但要注意——读取压缩文件主要是IO密集型任务,多线程提升有限,多进程效果会更好,但也要控制进程数量,别把CPU占满。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:06:18