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

334 投票
14 回答
407029 浏览
提问于 2025-04-16 20:15

我想逐行读取一个很大的文件(超过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)

撰写回答