首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python中逐行读取大型文本文件,而不将其加载到内存中?

如何在Python中逐行读取大型文本文件,而不将其加载到内存中?
EN

Stack Overflow用户
提问于 2011-06-25 10:04:15
回答 12查看 317.4K关注 0票数 287

我需要逐行读取一个大文件。假设该文件超过5 5GB,我需要读取每一行,但显然我不想使用readlines(),因为它将在内存中创建一个非常大的列表。

下面的代码在这种情况下是如何工作的?xreadlines本身是不是一个接一个地读入内存?是否需要生成器表达式?

代码语言:javascript
复制
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

两者都工作得很好!

EN

回答 12

Stack Overflow用户

发布于 2011-06-25 10:07:40

您所需要做的就是使用file对象作为迭代器。

代码语言:javascript
复制
for line in open("log.txt"):
    do_something_with(line)

在最新的Python版本中使用上下文管理器甚至更好。

代码语言:javascript
复制
with open("log.txt") as fileobject:
    for line in fileobject:
        do_something_with(line)

这也将自动关闭该文件。

票数 71
EN

Stack Overflow用户

发布于 2011-06-25 10:31:27

一种老式的方法:

代码语言:javascript
复制
fh = open(file_name, 'rt')
line = fh.readline()
while line:
    # do stuff with line
    line = fh.readline()
fh.close()
票数 19
EN

Stack Overflow用户

发布于 2011-06-25 10:06:17

您最好改用迭代器。相关链接:http://docs.python.org/library/fileinput.html

从文档中:

代码语言:javascript
复制
import fileinput
for line in fileinput.input("filename"):
    process(line)

这将避免一次将整个文件复制到内存中。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6475328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档