Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么file.readline()可以工作,但却可以打开(';文件名';,';r';)。readline()不能吗?_Python_File_Python 3.x_Readline - Fatal编程技术网

Python 为什么file.readline()可以工作,但却可以打开(';文件名';,';r';)。readline()不能吗?

Python 为什么file.readline()可以工作,但却可以打开(';文件名';,';r';)。readline()不能吗?,python,file,python-3.x,readline,Python,File,Python 3.x,Readline,我刚刚解决了一个让我至少浪费了3个小时生命的难题: >>> open('foo.py','r') >>> open('foo.py','r').readline() >>> '' 我尝试了各种组合,但都没有用,当然我问了谷歌叔叔 正如你所知道的,howewer,这确实有效 >>> bar=open('foo.py','r') >>> bar.readline() >>> 'Crap' &

我刚刚解决了一个让我至少浪费了3个小时生命的难题:

>>> open('foo.py','r')
>>> open('foo.py','r').readline()
>>> ''
我尝试了各种组合,但都没有用,当然我问了谷歌叔叔

正如你所知道的,howewer,这确实有效

>>> bar=open('foo.py','r')
>>> bar.readline()
>>> 'Crap'
>>> bar.readline()
>>> 'More crap'
>>> bar.readline()
>>> 'Even MORE crap'
>>> bar.readline()
>>> 'End of crap'
所以,我一直认为分配给变量的值就是这个。就这么简单 这是不可能的,否则代码将以任何方式工作

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

首先,您没有调用该函数

open('foo.py','r').readline
如果您这样尝试:

open('foo.py','r').readline()
您应该会看到预期的行为。

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

当然,只有在不断引用同一文件对象时,才会保留内部指针。调用
open()
将为您提供这样一个文件对象,但再次调用
open()
将为您提供另一个独立的文件对象

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

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


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

在您的第一个示例中,我看到的是readline而不是readline(),您在第一个示例中没有调用该方法。如果您反复使用
open('foo.py','r').readline()
,那么您会反复重新打开文件并阅读第一行。具有讽刺意味的是,您在标题中发布的代码是正确的:
open('name of file','r')。readline()
Sheers mate,这几乎是这里唯一具有建设性的评论。尽管与此无关,这仍然是一个一流的答案。那么,将文件对象赋值给变量是否会创建一个新对象?我以为这就是变量w/对象?调用
open()
将创建一个新的文件对象。您可以将其保存到变量中,也可以将其丢弃,这并不重要。如果再次调用
open()
,则会得到一个新的文件对象,其状态为全新状态(从第一个字符开始)。啊,我明白了,谢谢:)