我刚刚解决了一个让我至少花了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'
所以,我一直认为分配给变量的值就是这样。这看起来很简单 它只是不可能,否则代码将以任何方式工作。
不是要求直接回答,有没有人有任何材料我可以过去,可能不是 一个维基页面,因为它有点过于先进,但是有一篇文章。
答案 0 :(得分:2)
在第一个例子中,你没有调用函数!
open('foo.py','r').readline
如果您这样尝试:
open('foo.py','r').readline()
你应该看到你期望的行为。
答案 1 :(得分:1)
在文件对象上调用readline()
将从文件中读取,直到找到换行符并返回它已读取的内容。在此过程中,内部指针将位于下一行,因此readline()
的另一个调用将读取 next 行,直到找到文件末尾。
当您继续引用同一文件对象时,内部指针当然只会保留。调用open()
会给你这样一个文件对象,但再次调用open()
只会给你另一个独立的文件对象。
所以做open(…).readline()
两次只会打开文件,读取第一行,然后扔掉文件对象两次。第二个readline()
调用将引用一个新的文件对象,当然不会与第一个对象共享指针。
因此,如果您想要阅读整个文件,则只应使用一个文件对象,并在该文件对象上重复调用readline()
。
最后请注意,调用方法实际上意味着在末尾添加括号。否则,您只需引用该方法而不实际调用它。