我需要逐行读取一个大文件。假设该文件超过5 5GB,我需要读取每一行,但显然我不想使用readlines()
,因为它将在内存中创建一个非常大的列表。
下面的代码在这种情况下是如何工作的?xreadlines
本身是不是一个接一个地读入内存?是否需要生成器表达式?
f = (line for line in open("log.txt").xreadlines()) # how much is loaded in memory?
f.next()
另外,我应该怎么做才能像Linux tail
命令一样,以相反的顺序阅读这个文件呢?
我发现:
http://code.google.com/p/pytailer/
和
"python head, tail and backward read by lines of a text file“
两者都工作得很好!
发布于 2011-06-25 10:07:40
您所需要做的就是使用file对象作为迭代器。
for line in open("log.txt"):
do_something_with(line)
在最新的Python版本中使用上下文管理器甚至更好。
with open("log.txt") as fileobject:
for line in fileobject:
do_something_with(line)
这也将自动关闭该文件。
发布于 2011-06-25 10:31:27
一种老式的方法:
fh = open(file_name, 'rt')
line = fh.readline()
while line:
# do stuff with line
line = fh.readline()
fh.close()
发布于 2011-06-25 10:06:17
您最好改用迭代器。相关链接:http://docs.python.org/library/fileinput.html
从文档中:
import fileinput
for line in fileinput.input("filename"):
process(line)
这将避免一次将整个文件复制到内存中。
https://stackoverflow.com/questions/6475328
复制相似问题