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

读取大体积.gz压缩JSON文件前n行时性能异常的问题求助

问题原因及解决办法

循环读取耗时极长的原因

你误解了readlines()的参数用法:gzip.open返回的文件对象中,readlines(sizehint)的参数不是要读取的行数,而是字节数的提示值。当你在循环里传入line变量时,第一次循环line=0,readlines(0)会触发读取整个文件直到EOF——这意味着要解压完整的4GB压缩文件,自然会耗时极久。

替代方案

方案1:逐行读取n次

用next()函数每次读取一行,循环指定次数,简单直接:

import ast
import gzip

no_of_lines = 1
with gzip.open('/path/to/my/data/data.json.gz','rt') as f:
    for _ in range(no_of_lines):
        line = next(f)
        print(ast.literal_eval(line)['events'])

方案2:用itertools.islice批量取前n行

如果需要读取的行数较多,用islice更高效,无需手动控制循环:

import ast
import gzip
from itertools import islice

no_of_lines = 1
with gzip.open('/path/to/my/data/data.json.gz','rt') as f:
    for line in islice(f, no_of_lines):
        print(ast.literal_eval(line)['events'])

额外建议:优化JSON解析

如果你的每行内容是标准JSON格式(去掉外层列表包裹后),建议用json.loads替代ast.literal_eval,安全性和性能都更优:

import json
# 替换原代码中的ast.literal_eval(line)
data = json.loads(line.strip())
print(data['events'])

数据示例(中文翻译版)

['{"事件": {"类别": "事件", "MAC地址": "123456", "站点": "HSTH"}}']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:50:37