【问题标题】:need help writing code that detects if a file exists or not需要帮助编写检测文件是否存在的代码
【发布时间】:2020-08-31 21:56:20
【问题描述】:

我正在尝试编写代码,首先检查文件是否存在,然后检查文件是否为空,如果不是,则将文件的内容放入列表中。

如果文件不存在或为空,它应该只返回一个空列表。每当我使用不存在的文件对其进行测试时,它说它找不到该文件,即使我告诉它如果找不到该文件返回一个空字符串。

这是我的代码。

import os

def fileToList(fileName):
  
    newList = []
  
    fileSize = os.path.getsize(fileName)
    fileExist = os.path.exists(fileName)
   
    if fileExist == True:
        if fileSize != 0:
            f = open(fileName,"r")
            for line in f:
                newList.append(line.strip())
            f.close()
            return newList
        else:
            return newList
        
    else:
        return newList
    

【问题讨论】:

  • 这行fileSize = os.path.getsize(fileName) 应该在文件存在测试发生后放置。想想看,如果文件不存在,检查大小会报错,是吗?
  • 也许你应该检查文件是否存在之前试图获取它的大小。
  • 只要打开文件并处理异常,如果它不存在!

标签: python file


【解决方案1】:

将代码中的fileSize = os.path.getsize(fileName) 行移到if fileExist == True: 的正下方(如commented),否则当文件不存在时会抛出错误。

您修改后的代码将如下所示:

import os

def fileToList(fileName):
  
    newList = []
  
    fileExist = os.path.exists(fileName)
   
  
    if fileExist == True:
        fileSize = os.path.getsize(fileName)
        if fileSize != 0:
            f = open(fileName,"r")
            for line in f:
                newList.append(line.strip())
            f.close()
            return newList
        else:
            return newList
        
    else:
        return newList

【讨论】:

  • 您可以简化为if fileExistif fileSize。此外,应该使用with open() 约定,并且(通常)一个函数应该只有一个return 语句。
【解决方案2】:

你的代码给你一个错误的原因是这一行:

fileSize = os.path.getsize(fileName)

如果文件不再存在,则无法获取它的大小。

import os

def fileToList(fileName):
    if os.path.exists(fileName) and os.path.getsize(fileName):
        with open(fileName, 'r') as f:
            return f.readlines()
    else:
        return []
    
print(fileToList('random.txt'))

【讨论】:

  • @S3DEV 谢谢。请批准 OP 帖子上的编辑/。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 2011-05-27
  • 1970-01-01
  • 2016-10-24
相关资源
最近更新 更多