json 阅读大型.gz文件时出现问题

km0tfn4u  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(139)

我正在阅读一个大的压缩JSON文件~4GB。我想读取第一个n行。

with gzip.open('/path/to/my/data/data.json.gz','rt') as f:
    line_n = f.readlines(1)
    print(ast.literal_eval(line_n[0])['events']) # a dictionary object

当我想读一行的时候,这个方法很好用。如果现在尝试在循环中读。

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

我的代码执行时间很长,* 即使循环长度为1*。我假设这种行为与gzip读取文件的方式有关,也许当我循环时,它试图获取文件长度的信息,这导致了长时间的执行。有人能解释一下这一点,并提供一种替代方法吗?
编辑的第一行数据:['{"events": {"category": "EVENT", "mac_address": "123456", "co_site": "HSTH"}}\n']

idv4meu8

idv4meu81#

我们使用的是readlines()方法,它同时读取文件中的所有行,这可能会在阅读大文件时导致性能问题,因为Python需要一次将所有行加载到内存中。
另一种方法是使用iter()方法迭代文件的各行,而不必一次将所有行加载到内存中:

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

相关问题