如何逐行读取大文本文件,而不将其加载到内存中?
我想逐行读取一个很大的文件(超过5GB),但不想把整个文件的内容都加载到内存里。因为如果使用readlines()
,它会在内存中创建一个非常大的列表。
14 个回答
21
你最好使用迭代器来处理这个问题。
相关链接: fileinput
— 从多个输入流中逐行读取.
根据文档的说明:
import fileinput
for line in fileinput.input("filename", encoding="utf-8"):
process(line)
这样可以避免一次性把整个文件都加载到内存中。
80
你只需要把文件对象当作一个迭代器来使用。
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)
这样做还会自动关闭文件。
446
使用一个 for
循环来逐行读取文件。可以用 with open(...)
这个方式,让一个叫做 上下文管理器 的东西来确保在读取完文件后,文件会被自动关闭:
with open("log.txt") as infile:
for line in infile:
print(line)