我有一个很大的文件(6-60 GB),无法完全加载到内存中。 我可以逐行读取:
with open(...) as f:
for line in f:
# Do something with 'line'
但是有时候当我读到第n行的时候,我也需要从第n+2行获取信息。当我的“line”对象指向第n行时,我该如何读取第n+2行?我仍然需要正常处理后面的行。
我担心如果使用“f.readlines(10)”,因为我不知道我的前瞻大小(可能是99)。
我想过一种方法,就是在一个列表中为每一行设置指针,使用“seek”和“tell”,但我又担心存储空间问题。
在阅读此文件时,我寻求速度优先。 有什么建议吗?
f.read(line_length*4)
,然后执行buffer_lines = f.read(line_length*4).split()
。尽可能多地利用.seek()
来跳转。正如@Prune所说,最好使用已知引用的字典或列表,可以是纯粹的dict
或轻量级数据库(例如sqlite或postgresql)。 - Torxed