【问题标题】:Checking if a text file is empty检查文本文件是否为空
【发布时间】:2019-04-24 08:13:47
【问题描述】:

我有这部分代码,我原本无法开始工作:

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

它应该检查文本文件是否有任何文本。

但是,当我运行这段代码时,它总是会返回“Got text”,即使文件是空的。

我找到了让它工作的方法:

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

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

【问题讨论】:

  • if f.read() == " " 检查空格,而不是空字符串。你知道吗?
  • “一个空格”不等于“空”。
  • 不要读取文件以查看它是否为空...只需检查大小:os.path.getsize(filename)

标签: python


【解决方案1】:

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

如果文件有 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        第二个代码 sn-p 是有效地检查文件的长度是否为 0,这是您实际尝试做的(因此它起作用)

        要修复第一个 sn-p,您需要与空字符串 f.read() == "" 进行比较。你也可以明确检查长度,len(f.read()) == 0,或not len(f.read()),或者你可以check the length of the file without reading it.

        【讨论】:

          猜你喜欢
          • 2021-03-16
          • 2013-03-31
          • 1970-01-01
          • 1970-01-01
          • 2011-05-03
          • 1970-01-01
          • 1970-01-01
          • 2018-01-15
          相关资源
          最近更新 更多