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

在Python中,有多种方法可以检查文件是否存在并确定文件的类型。

在本教程中,我们将向您展示三种有关如何检查文件是否存在的技术。

检查文件是否存在

检查文件是否存在的最简单方法是尝试打开文件。这种方法不需要导入任何模块,并且可以与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方法。

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

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

安装pip install pathlib2

结论

在本指南中,我们向您展示了如何使用Python检查文件或目录是否存在。