用Python读取非常大文件的最佳方法

用Python读取非常大文件的最佳方法,python,Python,我有一个100GB的文本文件,大约有50K行,长度不一样 它太大了,无法放入内存,所以我现在逐行阅读。这也需要太长时间。有没有更聪明的方法来读取文件?例如,一次读取几行?对文件行的基本迭代如下: with open(filename) as f: for line in f: do_stuff(line) 这实际上只是将当前行读入内存,而不是更多。如果您想对缓冲区大小进行细粒度控制,我建议您改用它(例如,当您的行长度都相同时,这可能会很有用) 如果数据上的操作实际上不是

我有一个100GB的文本文件,大约有50K行,长度不一样


它太大了,无法放入内存,所以我现在逐行阅读。这也需要太长时间。有没有更聪明的方法来读取文件?例如,一次读取几行?

对文件行的基本迭代如下:

with open(filename) as f:
    for line in f:
        do_stuff(line)
这实际上只是将当前行读入内存,而不是更多。如果您想对缓冲区大小进行细粒度控制,我建议您改用它(例如,当您的行长度都相同时,这可能会很有用)

如果数据上的操作实际上不是IO绑定的,而是CPU绑定的,则使用多处理可能会很有用:

import multiprocessing

pool = multiprocessing.Pool(8)  # play around for performance

with open(filename) as f:
    pool.map(do_stuff, f)

这不会加快实际读取速度,但可能会提高处理行的性能。

对于这样大小的文件,我认为更重要的问题是“在读取数据时,您对数据做了什么?”而不是如何读取数据。当您说“耗时太长”时,您需要看看开销在哪里。您假设是IO在减慢速度,您可能是对的,但是如果没有看到代码,就不可能说出来。您必须逐行阅读吗?您可以只
读取
您可以合理处理的最大数量,然后执行。只需检查,使用
io.FileIO
而不是
open
即可将速度提高25倍。首先配置您的代码。然后优化。这里使用多处理很大程度上取决于问题是I/O还是CPU受限。是的,这就是我在回答中提到的原因。谢谢。但不幸的是,我的行的长度不一样。@Roy仍然认为多重处理可能对you@Roy这和这个答案有什么矛盾?