2012-02-08 34 views
1

可能重复:
Python: How to read huge text file into memory是否有基于行的文件读取的Python库?

为了处理大的文本文件(1G +)一行一行,通过任何行号的随机接入是期望的,最重要的是,不加载整个文件内容到RAM中。有没有一个Python库来做到这一点?

分析大型日志文件是有益的,只读就足够了。

如果没有这样的标准库,我必须寻找一种替代方法:找到一组函数/类,它可以从一个大的字符串类对象中返回第N行子字符串,这样我可以mmap(是的,我的意思是内存映射文件对象)文件到该对象然后做基于行的处理。

谢谢。

PS:日志文件几乎肯定有可变的行长度。

+0

的长度是相同的所有行? – 2012-02-08 07:09:05

+2

你可以预处理文件来创建排序索引? – anijhaw 2012-02-08 07:14:07

回答

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)

+1

这看起来像@anijhaw提到的“排序索引”。 – 2012-02-08 07:35:29

+0

@JimDeLaHunt - 是的,它的确如此。 – Kimvais 2012-02-08 07:40:23

相关问题