如何检查Python中是否存在文件或者目录
编写Python脚本时,仅当文件或者目录存在或者不存在时,才可能要执行某些操作。
例如,我们可能想读取数据或者将数据写入配置文件,或者仅在文件不存在时才创建文件。
在Python中,有许多不同的方法来检查文件是否存在并确定文件的类型。
本教程介绍了三种有关如何检查文件是否存在的技术。
检查文件是否存在
检查文件是否存在的最简单方法是尝试打开文件。
这种方法不需要导入任何模块,并且可以与Python 2和3一起使用。
如果要打开文件并执行某些操作,请使用此方法。
以下代码段使用了一个简单的try-except块。
我们正在尝试打开文件'filename.txt',如果文件不存在,则会引发'IOError'异常,并显示“文件不可访问”消息:
try: f = open("filename.txt") # Do something with the file except IOError: print("File not accessible") finally: f.close()
如果我们使用的是Python 3,则还可以使用“ FileNotFoundError”代替“ IOError”异常。
打开文件时,建议使用'with'关键字,即使在操作过程中引发异常,也可以确保在文件操作完成后正确关闭文件。
这也使代码更短,因为我们不需要使用“关闭”功能关闭文件。
以下代码等效于前面的示例:
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。
以下“ if”语句检查文件“ 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")
如果“路径”是常规文件或者文件的符号链接,则“ is_file”返回true。
要检查目录是否存在,请使用“ is_dir”方法。
“ pathlib”和“ os.path”之间的主要区别在于,“ pathlib”使我们可以使用具有相关方法和属性的路径作为“ Path”对象,而不是普通的“ str”对象。
如果要在Python 2中使用此模块,可以使用pip进行安装:
pip install pathlib2