【问题标题】:How come file.readline() works, yet open('name of file', 'r').readline() does not? [closed]为什么 file.readline() 可以工作,而 open('name of file', 'r').readline() 却不行? [关闭]
【发布时间】:2014-11-10 12:52:47
【问题描述】:

我刚刚解决了一个困扰我至少 3 个小时的难题:

>>> open('foo.py','r')
>>> open('foo.py','r').readline()
>>> ''

我尝试了各种组合,但都没有成功,当然我问了谷歌叔叔

如你所知,这确实有效

>>> bar=open('foo.py','r')
>>> bar.readline()
>>> 'Crap'
>>> bar.readline()
>>> 'More crap'
>>> bar.readline()
>>> 'Even MORE crap'
>>> bar.readline()
>>> 'End of crap'

所以,我一直认为分配给变量的值就是这样。就这么简单 不可能,否则代码会以任何一种方式工作。

没有人要求直接回答,有没有人有我可以查看的材料,可能没有 一个wiki页面,因为这有点太高级了,但是是一篇文章。

【问题讨论】:

  • 在你的第一个例子中,我看到的是 readline 而不是 readline()
  • 您没有调用第一个示例中的方法。如果您反复使用open('foo.py','r').readline(),那么您将反复重新打开文件并读取第一行。
  • 具有讽刺意味的是,您在标题中发布的代码是正确的:open('name of file', 'r').readline()

标签: python file python-3.x readline


【解决方案1】:

首先你没有调用函数!

open('foo.py','r').readline

如果你这样尝试:

open('foo.py','r').readline()

您应该会看到预期的行为。

【讨论】:

    【解决方案2】:

    在文件对象上调用readline() 将从文件中读取,直到找到换行符并返回它读取的任何内容。在此过程中,内部指针将定位在下一行,因此再次调用 readline() 将读取 next 行,直到找到文件末尾。

    当然,只有当你一直引用同一个文件对象时,才会保留内部指针。调用open() 会给你这样一个文件对象,但再次调用open() 只会给你另一个独立的文件对象。

    所以open(…).readline() 两次只会打开文件,读取第一行,然后扔掉文件对象——两次。第二个readline() 调用将引用一个新文件对象,该对象当然不共享第一个对象的指针。

    所以如果你想通读整个文件,你应该只使用一个文件对象并在那个文件对象上重复调用readline()

    最后请注意,调用方法实际上意味着在末尾添加括号。否则,您只会引用该方法而不实际调用它。

    【讨论】:

    • 纯粹的伙伴,这几乎是这里唯一的建设性评论。尽管独立于此,这仍然是一流的答案。那么,将文件对象分配给变量是否会创建一个新对象?我认为这只是将带有对象的变量别名?
    • 调用open() 将创建一个新的文件对象。您可以将其保存到变量中或丢弃它,这并不重要。如果你再次调用open(),你会得到一个新的文件对象(从第一个字符开始)。
    • 啊,我明白了,谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2020-03-05
    相关资源
    最近更新 更多