我试图读取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
答案 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']