Python读取大型文本文件(几GB)的最快方法

41

我有一个大的文本文件(约7GB)。 我正在寻找最快的方式来读取大型文本文件。 我一直在研究使用多种方法,例如按块读取以加快进程。

例如,在effbot的示例中建议按行读取。

# File: readline-example-3.py

file = open("sample.txt")

while 1:
    lines = file.readlines(100000)
    if not lines:
        break
    for line in lines:
        pass # do something**strong text**

为了每秒处理96,900行文本。

其他作者建议使用islice()。

from itertools import islice

with open(...) as f:
    while True:
        next_n_lines = list(islice(f, n))
        if not next_n_lines:
            break
        # process next_n_lines

list(islice(f, n))将返回文件f的接下来的n行的列表。在循环中使用它将会以每次n行为一组分块读取文件。


2
你为什么不自己检查哪种方法对你来说最快呢? - piokuc
请查看此处的建议:https://dev59.com/7WUq5IYBdhLWcg3wBLw- - BenDundee
@Nix 我不想逐行阅读,而是希望分块阅读。 - Gianni Spear
3
如果您浏览答案,有人展示了如何分块操作。 - Nix
亲爱的 @nix,我在 http://effbot.org/zone/readline-performance.htm 上读到了关于“加速行读取”的文章。作者建议:“如果您正在处理非常大的文件,如果您可以将块大小限制在合理范围内,那就太好了。”该页面相当古老,“2000年6月09日”,我正在寻找是否有更新(且更快)的方法。 - Gianni Spear
1个回答

15
with open(<FILE>) as FileObj:
    for lines in FileObj:
        print lines # or do some other thing with the line...

会一次读取一行到内存中,完成后关闭文件...


5
Morten逐行变得太慢了。 - Gianni Spear
7
啊呀,读得太快了…… - Morten Larsen
1
看起来 FileObj 循环的结果是单个字符,而不是一行。 - Xb74Dkjb
1
@DemianWolf 感谢您的评论,我有一个问题。如果给定的输入大小截断了一半的单词会发生什么?例如,如果最后一个单词是Responsibility,并且您在完整单词Responsibility的Respon处达到了块限制,您将如何处理它?是否有不打破单词的方法,或者我们需要遵循其他方法?谢谢! - Sunny
1
@DemianWolf,我也有类似的想法,但我希望能有更好的方法来处理它。不管怎样,还是谢谢! - Sunny
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接