file.readline()如何工作,但是打开('文件名',' r')。readline()不是吗?

时间:2014-11-10 12:52:48

标签: python file python-3.x readline

我刚刚解决了一个让我至少花了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'

所以,我一直认为分配给变量的值就是这样。这看起来很简单 它只是不可能,否则代码将以任何方式工作。

不是要求直接回答,有没有人有任何材料我可以过去,可能不是 一个维基页面,因为它有点过于先进,但是有一篇文章。

2 个答案:

答案 0 :(得分:2)

在第一个例子中,你没有调用函数!

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

如果您这样尝试:

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

你应该看到你期望的行为。

答案 1 :(得分:1)

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

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

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

因此,如果您想要阅读整个文件,则只应使用一个文件对象,并在该文件对象上重复调用readline()

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