编写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
方法。
pathlib
和os.path
之间的主要区别在于pathlib
允许您使用具有相关方法和属性的Path
对象,而不是普通str
对象来处理路径。
如果要在Python 2中使用此模块,可以使用pip安装pathlib2模块:
pip install pathlib2
结论
在本指南中,我们向您展示了如何使用Python检查文件或目录是否存在。如果您有任何问题或反馈,请随时发表评论。