【问题标题】:Python readline() and readlines() not workingPython readline() 和 readlines() 不起作用
【发布时间】:2017-12-16 13:35:10
【问题描述】:

我正在尝试读取 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

【问题讨论】:

  • readline(10)的意思不是“读取第10行”,而是“读取一行,但最多读取10个字节”
  • 谢谢。我不知道这个!

标签: python file readline readlines


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-07-04
    • 2017-09-11
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 2012-02-15
    • 2011-09-08
    • 1970-01-01
    相关资源
    最近更新 更多