Python readline()和readlines()不起作用

时间:2017-12-16 13:35:11

标签: python file readline readlines

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

for line in f:
    do something to line

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

print f.readline(10)

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

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

我不确定我是否解释得很清楚。对不起,英语不是我的第一语言。无论如何,我可以在没有readline方法的情况下使其工作,但我真的想知道他们为什么不按预期工作。

这是文件的前10行:

548098
968516
853181
485102
69638
689242
319040
610615
936181
486052

1 个答案:

答案 0 :(得分:0)

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

这些数字指定要读取的行号,但将读取最大字节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']