编写Python脚本时,仅当文件或目录不存在时,才可能要执行某些操作。例如,您可能想读取数据或将数据写入配置文件,或者仅在不存在的情况下才创建文件。

在Python中,有多种方法可以检查文件是否存在并确定文件的类型。在本教程中,我们将向您展示三种方式使用python检查文件是否存在。包括使用os.path,pathlib,try-except和open方法,在Python 2中使用pathlib。

检查文件是否存在

检查文件是否存在的最简单方法是尝试打开文件。这种方法不需要导入任何模块,并且可以与Python 2和3一起使用。如果要打开文件并执行某些操作,请使用此方法。

在以下代码段中,我们使用了一个简单的try-except。我们正在尝试打开文件filename.txt,如果文件不存在,它将引发异常,并打印“文件不可访问”。

try:
    f = open("filename.txt")
    # Do something with the file
except IOError:
    print("File not accessible")
finally:
    f.close()

如果您使用的是Python 3,则也可以使用FileNotFoundError代替IOError

打开文件时,建议使用with关键字,以确保在文件操作完成后正确关闭文件,即使在操作过程中引发异常也是如此。另外,由于不需要使用close函数关闭文件,因此它会使代码更短。

以下代码等效于上面的示例:

try:
    with open('/etc/hosts') as f:
        print(f.readlines())
        # Do something with the file
except IOError:
    print("File not accessible")

在上面的示例中,我们使用了try-except并打开文件以避免出现竞争情况。当您有多个进程访问同一文件时,就会发生争用情况。

例如,如果您检查文件的存在,则另一个过程可能会在检查和打开文件之间的时间范围内创建,删除或阻止文件。这可能会导致您的代码中断。

使用os.path模块检查文件是否存在

os.path模块提供了一些有用的函数来处理路径名。该模块可用于Python 2和3。在本教程中,最重要的函数是:

  • os.path.exists(path)-如果path是文件,目录或有效的符号链接,则返回true。
  • os.path.isfile(path) -如果path是常规文件或文件的符号链接,则返回true。
  • os.path.isdir(path) -如果path是目录或指向目录的符号链接,则返回true。

以下代码将检查文件filename.txt是否存在:

import os.path

if os.path.isfile('filename.txt'):
    print ("File exist")
else:
    print ("File not exist")

如果只想检查文件是否存在,请使用此方法。如果要对文件执行操作,请使用之前的方法。

使用pathlib模块检查文件是否存在

pathlib模块在Python 3.4及更高版本中可用。该模块提供了一个面向对象的接口,用于处理不同操作系统的文件系统路径。与前面的示例相同,以下代码将检查文件filename.txt是否存在:

from pathlib import Path

if Path('filename.txt').is_file():
    print ("File exist")
else:
    print ("File not exist")

如果path是常规文件或指向文件的符号链接,则is_file返回true。如果要检查目录,请使用is_dir方法。

pathlibos.path之间的主要区别在于pathlib允许您使用具有相关方法和属性的Path对象,而不是普通str对象来处理路径。

如果要在Python 2中使用此模块,可以使用pip安装pathlib2模块:

pip install pathlib2

结论

在本指南中,我们向您展示了如何使用Python检查文件或目录是否存在。如果您有任何问题或反馈,请随时发表评论。