要逐行处理大型文本文件(1G +),需要通过任意行号随机访问,最重要的是,无需将整个文件内容加载到RAM中。有没有python库可以做到这一点?
分析大型日志文件时,只读即可。
如果没有这样的标准库,我必须寻找另一种方法:找到一组函数/类,它可以从一个类似大字符串的对象返回第N行子字符串,这样我就可以mmap(是的,我的意思是内存映射文件对象)该文件到该对象然后进行基于行的处理。
谢谢。
PS:日志文件几乎肯定有可变行长。
答案 0 :(得分:1)
我认为下面的内容可能有用,因为file object的方法readline()
一次读取一行。如果这些行具有任意长度,则需要索引如下的位置。
lines = [0]
with open("testmat.txt") as f:
while f.readline():
lines.append(f.tell())
# now you can read an arbitrary line:
f.seek(lines[1235])
line = f.readline()
如果行长度相同,则可以f.seek(linenumber*linelenght)