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

时间:2015-09-15 01:03:36

标签: python file

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

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

我试过这个:

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

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

2 个答案:

答案 0 :(得分: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")

答案 1 :(得分:0)

您可以使用for语句而不是while语句。你可以做点什么

for line in f.readlines()
    print(line)

可能有帮助。