Python中逐行文件读取的效率

时间:2012-05-05 09:18:31

标签: python performance file

现在我正在编写一些Python代码来处理大量的twitter文件。这些文件非常大,无法容纳在内存中。为了与他们合作,我基本上有两个选择。

  1. 我可以将文件拆分成可以放入内存的较小文件。

  2. 我可以逐行处理大文件,所以我永远不需要将整个文件同时放入内存中。我希望后者易于实现。

  3. 但是,我想知道在整个文件中读取内存然后从那里操作它是否更快。似乎从磁盘上逐行读取文件似乎很慢。但话说回来,我并不完全理解这些过程在Python中是如何工作的。有没有人知道逐行文件读取是否会导致我的代码比我将整个文件读入内存并从那里操作它更慢?

2 个答案:

答案 0 :(得分:10)

要快速阅读文件,请查看mmap模块。这将使整个文件显示为一大块虚拟内存,即使它比可用内存大得多。如果您的文件大于3或4千兆字节,那么您将需要使用64位操作系统(以及64位版本的Python)。

我已经为超过30 GB的文件做了这个,效果很好。

答案 1 :(得分:1)

如果要逐行处理文件,可以直接使用文件对象作为迭代器:

for line in open('file', 'r'):
    print line

这非常有效;如果您希望一次处理一批行,您还可以使用带有 sizehint 参数的文件对象的readlines()方法。这将读入 sizehint 字节加上足够的字节数来完成最后一行。