关于python:检查文本文件是否为空

Checking if a text file is empty

我有一部分原本无法工作的代码,看起来是这样的:

1
2
3
4
5
6
  with open ("Names.txt" ,"r+") as f:
 f.seek(0)
 if f.read() =="" :
     print("No text")
 else :
     print ("Got text")

它应该做的是检查文本文件是否有任何文本。然而,当我运行这个代码时,它总是返回"got text",即使文件是空的。在尝试修复它大约10分钟后,我稍微更改了代码,并找到了一种方法使其工作:

1
2
3
4
5
6
with open ("Names.txt" ,"r+") as f:
 f.seek(0)
 if not f.read():
     print("No text")
 else :
     print ("Got text")

所以我的问题是,为什么第二段代码有效,而第一段代码无效?

提前感谢<3


只是不要测试这样的文件是否为空。

如果文件大5兆字节怎么办?它将尝试读取所有文件…

您可以尝试读取1个字节,并查看是否为空:

1
2
3
4
if f.read(1):
   # file isn't empty
else:
   # file is empty

或者只是检查尺寸,不需要打开,寻找,无论什么:

1
2
3
4
if os.path.getsize(filename):
   # file isn't empty
else:
   # file is empty

您正在与字符串""进行比较。这不是空文件。正确的代码如下:

1
2
3
4
5
6
with open ("Test.txt" ,"r+") as f:
     f.seek(0)
     if f.read() =="" :
         print("No text")
     else :
         print ("Got text")


也许,因为在第一种情况下,您不将其与空字符串(""进行比较,而是将其与包含单个空格(""的字符串进行比较。


在第一种情况下,将结果与""进行比较(注意引号之间的空格)。这个空间不等于一个空文件,而是寻找一个长度正好为1的文件,其中单个字符就是空间字符。

而第二个代码片段则有效地检查文件的长度是否为0,这正是您实际要做的(因此它起作用的原因)。

要修复第一个代码片段,需要将其与空字符串f.read() ==""进行比较。您还可以显式地检查文件长度:len(f.read()) == 0not len(f.read()),或者您也可以检查文件长度而不读取它。