我正在阅读一个大的压缩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']
1条答案
按热度按时间idv4meu81#
我们使用的是readlines()方法,它同时读取文件中的所有行,这可能会在阅读大文件时导致性能问题,因为Python需要一次将所有行加载到内存中。
另一种方法是使用iter()方法迭代文件的各行,而不必一次将所有行加载到内存中: