8

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

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

  2. 我可以逐行处理大文件,因此我不需要一次将整个文件放入内存中。为了便于实施,我更喜欢后者。

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

4

2 回答 2

10

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

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

于 2012-05-05T09:20:41.910 回答
1

如果要逐行处理文件,可以简单地将文件对象用作迭代器:

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

这非常节省内存;如果您想一次处理一批行,您还可以使用readlines()带有sizehint参数的文件对象的方法。这会读取sizehint字节加上足够数量的字节来完成最后一行。

于 2012-05-05T09:27:39.657 回答