【问题标题】:Python fastest way to read a large text file (several GB) [duplicate]Python读取大型文本文件(几GB)的最快方法[重复]
【发布时间】:2013-02-03 08:22:21
【问题描述】:

我有一个大文本文件 (~7 GB)。我正在寻找是否存在读取大文本文件的最快方法。我一直在阅读有关使用几种方法逐块读取以加快该过程的方法。

例如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 行文本。 其他authors建议使用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行的文件

【问题讨论】:

  • 你为什么不自己检查一下什么对你来说是最快的?
  • @Nix 我不想逐行阅读,而是逐块阅读
  • 如果你浏览答案,有人会分块展示如何做。
  • 亲爱的@nix 我在effbot.org/zone/readline-performance.htm 中读到关于“加快行阅读”作者建议“如果您正在处理非常大的文件,如果您可以将块大小限制为某些东西会很好合理的”。该页面很旧“2000 年 6 月 9 日”,我正在寻找是否有更新(和更快)的方法。

标签: python performance optimization line chunking


【解决方案1】:
with open(<FILE>) as FileObj:
    for lines in FileObj:
        print lines # or do some other thing with the line...

每次将一行读入内存,完成后关闭文件...

【讨论】:

  • Morten 逐行变得太慢了。
  • 啊,读得太快了……
  • 看起来FileObj的循环结果是单个字符,而不是行。
  • @DemianWolf 感谢您的评论,我有一个问题。如果给定的输入大小截断了一个单词的一半会发生什么。例如,如果最后一个词是 Responsibility,而你在 Respon 处达到了全词 Responsibility 的块限制,你将如何处理它。有没有办法不破坏单词,还是我们需要遵循其他方法?谢谢!
  • @DemianWolf,我想到了类似的方法,但我希望也许会有更好的方法来处理它。还是谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 2012-08-26
  • 1970-01-01
相关资源
最近更新 更多