读取大文本文件而不立即将其读入RAM

Kev*_*uan 3 python file

我有一个大文本文件,它是2GB或更多.我当然不应该使用read().

我认为使用readline()可能是一种方式,但我不知道如何在文件的末尾停止循环.

我试过这个:

with open('test', 'r') as f:
    while True:
        try:
            f.readline()
        except:
            break
Run Code Online (Sandbox Code Playgroud)

但是当文件结束时,循环不会停止并且将保持打印空字符串('').

Fel*_*elk 5

文件结束定义为返回的空字符串readline.请注意一个实际的空行,就像readline行分隔符返回的每一行一样.

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

但话说回来,python中的文件对象已经可以迭代了.

with open('test', 'r') as f:
    for line in f:
        print(line.strip())
Run Code Online (Sandbox Code Playgroud)

strip 删除空格,包括换行符,因此不打印双换行符.

如果你不喜欢它安全,并希望尽可能少的代码:

for l in open("text"): print(l.strip())
Run Code Online (Sandbox Code Playgroud)

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