【问题标题】:How to I read several lines in a file faster using python?如何使用 python 更快地读取文件中的几行?
【发布时间】:2011-06-21 04:03:40
【问题描述】:

到目前为止,我使用以下 python 代码:

file = open(filePath, "r")
lines=file.readlines()
file.close()

假设我的文件有几行(10,000 或更多),那么如果我对多个文件执行此操作,我的程序就会变慢。有没有办法在 Python 中加快速度?阅读各种链接我知道 readlines 将文件行存储在内存中,这就是代码变慢的原因。

我也试过下面的代码,我得到的时间增益是 17%。

lines=[line for line in open(filePath,"r")]

python2.4 中是否还有其他模块(我可能错过了)。 谢谢, 桑迪亚

【问题讨论】:

  • 哪些链接?我很想看到证明是这种情况的证据。
  • @Mikel: 来自 docstring: "readlines([size]) -> 字符串列表,每行来自文件。重复调用 readline() 并返回如此读取的行列表。可选的 size 参数(如果给定)是返回的行中总字节数的近似界限。"
  • @DSM:我的意思是说readlines 的文档更慢。 ;-)
  • @Mike1: 啊,这使得 lot 作为一个问题更有意义。 :^)

标签: python file readlines


【解决方案1】:
for line in file:

这为您提供了一个迭代器,它一次读取文件对象一行,然后从内存中丢弃前一行。

一个文件对象是它自己的迭代器,例如 iter(f) 返回 f(除非 f 被关闭)。当文件用作迭代器时,通常在 for 循环中(例如,for line in f: print line),next() 方法会被重复调用。此方法返回下一个输入行,或在 EOF 被命中时引发 StopIteration。为了使 for 循环成为循环文件行的最有效方式(一种非常常见的操作),next() 方法使用隐藏的预读缓冲区。作为使用预读缓冲区的结果,将 next() 与其他文件方法(如 readline())结合起来无法正常工作。但是,使用 seek() 将文件重新定位到绝对位置将刷新预读缓冲区。 2.3 版中的新功能。

简短回答:不要将行分配给变量,只需在循环内执行您需要的任何操作。

【讨论】:

    猜你喜欢
    • 2020-01-23
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2017-03-26
    • 2017-02-15
    • 2015-10-23
    • 1970-01-01
    • 2019-08-29
    相关资源
    最近更新 更多