如何在不将其加载到内存的情况下逐行读取Python中的大型文本文件?

如何在不将其加载到内存的情况下逐行读取Python中的大型文本文件?

我需要逐行读一个大文件。假设该文件的容量超过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头、尾和后读"

两个人都干得很好!


翻阅古今
浏览 785回答 3
3回答

茅侃侃

我提供这个答案是因为基思虽然简洁,但没有关闭文件明示with open("log.txt") as infile:     for line in infile:         do_something_with(line)

海绵宝宝撒

您所需要做的就是使用文件对象作为迭代器。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)这也将自动关闭文件。

哆啦的时光机

一种古老的方法:fh = open(file_name, 'rt')line = fh.readline()while line:     # do stuff with line     line = fh.readline()fh.close()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python