繁体   English   中英

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)

无论我使用哪个数字作为参数,程序始终返回同一行。 确切地说,即使文件中的第一行是一个大数字,如果我执行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

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

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

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

这两个命令将从第一行548098 第一个命令只读取1个字节,第二个命令读取其余的行,因为剩下的字节数少于100个。 如果再次调用readline ,它将继续第二行, readline

同样, f.readlines(10)将读取整行,直到读取的字节总数大于指定的数字为止:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM