0/前语
通常在读写文件之前,咱们需求先判别文件或许目录是否存在。
不然在接下来的处理中可能会报错。
所以在做任何操作之前,最好仍是先判别文件、目录是否存在。
下面将从介绍3种判别文件、目录是否存在的办法。
分别是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”文件是否存在,
可是当时途径下有个叫“test_data”的目录,这样就可能呈现误判。
为了避免这样的情况,能够这样:
只查看文件
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)
说明:
在以上DEMO的函数里,我并没有运用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()
假如你open的文件不存在,程序会抛出错误,运用try句子来捕获这个错误。
程序无法拜访文件,可能有许多原因:
假如你open的文件不存在,将抛出一个FileNotFoundError的反常;
文件存在,可是没有权限拜访,会抛出一个PersmissionError的反常。
所以能够运用下面的代码来判别文件是否存在:
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的子类。所以能够将程序简化一下:
try:
f =open()
f.close()
except IOError:
print("File is not accessible.")
运用try句子进行判别,处理一切反常非常简略和优雅的。而且比较其他不需求引入其他外部模块。
3/pathlib
pathlib模块在Python3版本中是内建模块,可是在Python2中是需求独自安装三方模块。
运用pathlib需求先运用文件途径来创立path目标。此途径能够是文件名或目录途径。
查看途径是否存在
import pathlib
path = pathlib.Path("path/file")
path.exist()
查看途径是否是文件
path = pathlib.Path("path/file")
path.is_file()