Python read()函数返回空字符串

时间:2013-05-04 12:40:44

标签: python file-io

如果我在Python中输入:

open("file","r").read()

有时它会将文件的确切内容作为字符串返回,有时它会返回一个空字符串(即使文件不为空)。 有人可以解释这取决于什么?

3 个答案:

答案 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.'

文档链接:read() tell() seek()

  

注意:如果在您第一次读取文件时发生这种情况,请检查该文件是否为空。如果不是尝试将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中,情况并非如此,但你必须首先习惯这种风格......