如果我在Python中输入:
open("file","r").read()
有时它会将文件的确切内容作为字符串返回,有时它会返回一个空字符串(即使文件不为空)。 有人可以解释这取决于什么?
答案 0 :(得分:18)
当您到达文件末尾(EOF)时,.read
方法会返回''
,因为没有更多数据可供阅读。
>>> f = open('my_file.txt')
>>> f.read() # you read the entire file
'My File has data.'
>>> f.read() # you've reached the end of the file
''
>>> f.tell() # give my current position at file
17
>>> f.seek(0) # Go back to the starting position
>>> f.read() # and read the file again
'My File has data.'
注意:如果在您第一次读取文件时发生这种情况,请检查该文件是否为空。如果不是尝试将
file.seek(0)
放在read
之前。
答案 1 :(得分:5)
来自file.read()
method文档:
立即遇到EOF时会返回空字符串。
您已经点击了文件对象的末尾,没有更多数据可供阅读。文件保持一个“当前位置”,一个指向文件数据的指针,从0开始并在读取dada时递增。
请参阅file.tell()
method宣读该职位,并file.seek()
method进行更改。
答案 2 :(得分:2)
还有另一个问题,那就是文件本身可能会被泄露,只能被垃圾收集器延迟或甚至从未回收。因此,请使用with语句:
with open(...) as file:
data = file.read()
对于具有C-ish背景(C,C ++,Java,C#和其他可能)的人来说,这很难消化,因为那里的缩进始终会创建一个新的范围,并且在该范围内声明的任何变量都是外部无法访问的。在Python中,情况并非如此,但你必须首先习惯这种风格......