如何使用Python更快地读取文件中的多行?

3 投票
1 回答
3343 浏览
提问于 2025-04-16 11:12

目前我使用以下的Python代码:

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

假设我的文件有很多行(1万行或更多),那么如果我对多个文件这样处理,我的程序就会变得很慢。我想知道有没有办法在Python中加快这个速度?通过阅读各种链接,我了解到readlines会把文件的每一行都存储在内存中,这就是代码变慢的原因。

我也尝试了以下代码,结果我得到的时间提升是17%。

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

在Python 2.4中,还有没有其他的模块是我可能错过的呢?谢谢,

Sandhya

1 个回答

6
for line in file:

这段话告诉我们,使用迭代器可以一次读取文件中的一行,然后把之前的那一行从内存中丢掉。

文件对象本身就是一个迭代器,比如说用 iter(f) 就能得到 f(除非 f 已经关闭了)。当我们把文件当作迭代器使用时,通常是在一个 for 循环里(比如说,for line in f: print line),这时会不断调用 next() 方法。这个方法会返回下一行的内容,或者在到达文件末尾时抛出 StopIteration 的错误。为了让 for 循环在读取文件的每一行时效率最高(这是一种非常常见的操作),next() 方法会使用一个隐藏的预读缓冲区。因为使用了这个预读缓冲区,next() 和其他文件方法(比如 readline())一起使用时可能会出现问题。不过,如果用 seek() 方法把文件定位到一个绝对位置,就会清空这个预读缓冲区。这个功能是在 2.3 版本中新增的。

简单来说:不要把每一行赋值给一个变量,而是在循环里直接进行你需要的操作。

撰写回答