Python判断文件目录是否存在及创建多层目录的三种方法
本文详细介绍Python中判断文件和目录是否存在的三种常用方法:使用os模块的exists、isfile及access函数,利用try语句捕获FileNotFoundError或IOError,以及Python3内置的pathlib模块。同时涵盖os.makedirs创建多层目录与os.mkdir的区别,帮助开发者在读写文件前有效规避路径错误。
前言
在进行文件读写操作之前,通常需要先确认目标文件或目录是否已经存在,否则后续处理步骤可能会引发错误。因此,在执行任何具体操作前,先验证文件路径的有效性是一个良好的编程习惯。
接下来将介绍三种用于判断文件和目录是否存在的方法。
- os模块
- try语句
- pathlib模块
1、os模块
(1)判断文件是否存在
import os
os.path.exists(test_file.txt)
#True
os.path.exists(no_exist_file.txt)
#False(2)判断文件夹是否存在
import os
os.path.exists(test_dir)
#True
os.path.exists(no_exist_dir)
#False(3)其他
通过观察可以发现,使用os.path.exists()方法时,判断文件和文件夹的逻辑是相同的。然而,这种方法存在一个潜在问题:如果你希望检查名为“test_data”的文件是否存在,但当前路径下恰好有一个同名的目录,os.path.exists()会返回True,从而导致误判。
为了避免上述误判情况,可以专门针对文件进行检查。
import os
os.path.isfile("test-data")通过上述方法,如果文件“test-data”不存在则返回False,若存在则返回True。需要注意的是,即使文件存在,你可能还需要进一步判断该文件是否具备读写权限。
(4)创建多层目录
os.makedirs(path) #多层创建目录
#比如:os.makedirs('/home/ai_user/')(5)创建单层目录
os.mkdir(path) 创建目录import os
def mkdir(path):
# 去除首尾的空格
path=path.strip()
# 去除尾部 \ 符号
path=path.rstrip("\\")
isExists=os.path.exists(path)
# 判断结果
if not isExists:
# 如果不存在则创建目录
# 创建目录操作函数
os.makedirs(path)
print(path+' 创建成功')
return True
else:
# 如果目录存在则不创建,并提示目录已存在
print(path+' 目录已存在')
return False
# 定义要创建的目录
mkpath="d:\\qttc\\web\\"
# 调用函数
mkdir(mkpath)说明:
在上述示例代码中,并未使用os.mkdir(path)函数,而是采用了用于创建多层目录的os.makedirs(path)函数。这两个函数的主要区别在于:当父目录不存在时,os.mkdir(path)会报错并拒绝创建,而os.makedirs(path)则会自动创建缺失的父目录。
例如:在示例中,我们要创建的目录web位于D盘的qttc目录下。如果D盘下没有qttc这个父目录,使用os.mkdir(path)会提示目标路径不存在;而使用os.makedirs(path)则会自动先创建父目录qttc,随后在qttc目录下创建子目录web。
(6)判断文件是否可以读写
可以使用os.access()方法来检查文件是否具备读写操作的权限。
语法:
os.access(path, mode)
其中path为文件路径,mode为操作模式,包含以下几种选项:
- os.F_OK: 检查文件是否存在;
- os.R_OK: 检查文件是否可读;
- os.W_OK: 检查文件是否可以写入;
- os.X_OK: 检查文件是否可以执行
该方法通过判断文件路径是否存在以及是否满足各种访问模式的权限,最终返回True或False。
import os
if os.access("/file/path/foo.txt", os.F_OK):
print "Given file path is exist."
if os.access("/file/path/foo.txt", os.R_OK):
print "File is accessible to read"
if os.access("/file/path/foo.txt", os.W_OK):
print "File is accessible to write"
if os.access("/file/path/foo.txt", os.X_OK):
print "File is accessible to execute"2、try语句
可以在程序中直接使用open()方法来尝试检查文件是否存在以及是否可读写。
语法:
open()
如果尝试打开的文件不存在,程序会抛出错误,此时可以使用try语句来捕获该异常。程序无法访问文件的原因可能有很多:如果文件不存在,将抛出FileNotFoundError异常;如果文件存在但没有访问权限,则会抛出PermissionError异常。
因此,可以使用以下代码来判断文件是否存在:
try:
f = open()
f.close()
except FileNotFoundError:
print("File is not found.")
except PersmissionError:
print("You don't have permission to access this file.")实际上,没有必要对每种异常进行如此细致的单独处理,因为上述两个异常都是IOError(在Python 3中为OSError)的子类。
因此,可以将程序简化如下:
try:
f =open()
f.close()
except IOError:
print("File is not accessible.")使用try语句进行判断,并统一处理所有异常,这种方法既简单又优雅。此外,相比其他方法,它不需要引入额外的外部模块。
3、pathlib
pathlib模块在Python 3版本中是内建模块,但在Python 2中需要单独安装第三方模块。使用pathlib时,需要先利用文件路径创建path对象,该路径可以是文件名或目录路径。
#检查路径是否存在
import pathlib
path = pathlib.Path("path/file")
path.exist() # True/False
#检查路径是否是文件
path = pathlib.Path("path/file")
path.is_file()到此这篇关于python判定文件目录是否存在及创建多层目录的文章就介绍到这了,更多相关python创建目录内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













