检查文本文件是否为空

时间:2018-11-21 17:20:39

标签: python

我有这部分代码本来无法使用,看起来像这样:

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

它应该做的是检查文本文件中是否有任何文本。 但是,当我运行此代码时,即使文件为空,它也总是返回“ Got text”。 在尝试修复了大约10分钟后,我对代码进行了一些更改,并找到了使其工作的方法:

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

所以我的问题是,为什么第二段代码工作而第一段代码却行不通?

感谢进阶<3

4 个答案:

答案 0 :(得分:4)

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

如果文件大5 TB怎么办?它将尝试读取所有文件...

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

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

或仅检查大小,无需打开,寻找,无论如何:

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

答案 1 :(得分:0)

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

第二个代码段实际上是在检查文件的长度是否为0,这就是您实际上要尝试执行的操作(因此起作用)

要修复第一个代码段,您需要比较一个空字符串f.read() == ""。您还可以显式检查长度len(f.read()) == 0not len(f.read()),也可以check the length of the file without reading it.

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您正在与字符串“”进行比较。那不是一个空文件。正确的代码应如下所示:

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