不要一次性将大型文本文件读入内存,如何做?

3

我有一个很大的文本文件,大小为2GB或更大。当然我不应该使用read()

我认为使用readline()可能是一种方法,但我不知道如何在文件结束时停止循环。

我尝试过这个:

with open('test', 'r') as f:
    while True:
        try:
            f.readline()
        except:
            break

但是当文件到达结尾时,循环不会停止,并且会继续打印空字符串('')。
2个回答

5

文件结束指的是由readline返回的空字符串。请注意,实际上的空行(就像readline返回的每一行一样)都以行分隔符结尾。

with open('test', 'r') as f:
    while True:
        line = f.readline()
        if line == "":
            break

然而,在Python中,文件对象已经是可迭代的。

with open('test', 'r') as f:
    for line in f:
        print(line.strip())

strip 函数用于去除字符串中的空格,包括换行符,这样就不会出现连续两个换行符。

如果你想要更加简洁的代码:

for l in open("text"): print(l.strip())

编辑: strip 可以从两侧移除所有类型的空格。如果你只想去掉结尾的换行符,可以使用 rstrip("\n")


我不知道换行符会被包含在读取行的内容中。谢谢! - Matthew Chrobak

0
你可以使用for语句代替while语句。你可以这样做:
for line in f.readlines()
    print(line)

可能有所帮助。


1
我认为这会一次性读取文件,无法读取大文件。 - Remi Guan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接