我有这部分代码本来无法使用,看起来像这样:
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
答案 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()) == 0
或not 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")