Python readline() 和 readlines() 不工作

Python readline() and readlines() not working

我正在尝试读取一个 5GB 文件的内容,然后对它们进行排序并查找重复项。该文件基本上只是一个数字列表(每个都在一个新行上)。没有空行或除数字以外的任何符号。这些数字都很大(至少 6 位数)。我目前正在使用

for line in f:
    do something to line

以避免内存问题。我很好用。但是,我很想知道为什么 readline() 和 readlines() 对我不起作用。当我尝试

print f.readline(10)

无论我使用哪个数字作为参数,程序总是returns同一行。准确地说,如果我执行 readline(0) 它 returns 一个空行,即使文件中的第一行是一个大数字。如果我尝试 readline(1) 它 returns 2,即使数字 2 不在文件中。当参数 >= 6 时,它总是 returns 相同的数字:291965。

此外,无论参数是什么,readlines() 方法总是 returns 相同的行。即使我尝试打印 f.readlines(2),它仍然给我一个超过 1000 个数字的列表。

不知道我解释的好不好。抱歉,英语不是我的母语。无论如何,我可以在没有 readline 方法的情况下使其工作,但我真的很想知道为什么它们不能按预期工作。

文件的前 10 行如下所示:

548098
968516
853181
485102
69638
689242
319040
610615
936181
486052

我无法重现 f.readline(1) 返回 2,或 f.readlines(10) 返回 "thousands of lines",但您似乎误解了这些函数的整数参数的作用。

这些数字 指定要读取的行数,但最大字节数 readline 将读取。

>>> f = open("data.txt")
>>> f.readline(1)
'5'
>>>f.readline(100)
'48098\n'

两个命令都将从第一行开始读取,即548098;第一个将只读取 1 字节,第二个命令读取该行的其余部分,因为剩余的字节不到 100 个。如果你再次调用readline,它将继续第二行,以此类推

类似地,f.readlines(10) 将读取整行,直到读取的 字节数大于指定的数字:

>>> f.readlines(10)
['968516\n', '853181\n']