Python中可以用三种方法判断文件是否存在
作者:Python?学习者 发布时间:2022-05-11 10:15:41
通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错。所以最好在做任何操作之前,先判断文件是否存在。
这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块、Try语句、pathlib模块。
1.使用os模块
os模块中的os.path.exists()方法用于检验文件是否存在。
判断文件是否存在
import os
os.path.exists(test_file.txt)
#True
os.path.exists(no_exist_file.txt)
#False
判断文件夹是否存在
import os
os.path.exists(test_dir)
#True
os.path.exists(no_exist_dir)
#False
可以看出用os.path.exists()方法,判断文件和文件夹是一样。
其实这种方法还是有个问题,假设你想检查文件“test_data”是否存在,但是当前路径下有个叫“test_data”的文件夹,这样就可能出现误判。为了避免这样的情况,可以这样:
只检查文件
import os
os.path.isfile("test-data")
通过这个方法,如果文件”test-data”不存在将返回False,反之返回True。
即是文件存在,你可能还需要判断文件是否可进行读写操作。
判断文件是否可做读写操作
使用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 PermissionError:
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对象。此路径可以是文件名或目录路径。
检查路径是否存在
path = pathlib.Path("path/file")
path.exist()
检查路径是否是文件
path = pathlib.Path("path/file")
path.is_file()
来源:https://blog.csdn.net/sinat_38682860/article/details/125523642


猜你喜欢
- 下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理主要参考HEG的用户手册:h
- 官方文案:https://docs.python.org/zh-cn/3/library/hashlib.htmlhashlib --- 安
- 由于在模型训练的过程中存在大量的随机操作,使得对于同一份代码,重复运行后得到的结果不一致。因此,为了得到可重复的实验结果,我们需要对随机数生
- Expression定义 IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和Javascript表达式关联起来,这
- Seriesseries是一种一维的数组型对象,它包含了一个值序列和一个数据标签import pandas as pdimport nump
- 官网地址需要引入awesome-bootstrap-checkbox.css、font-awesome.css以及font awesome对
- mysq 正确清理binlog日志前言:MySQL中的binlog日志记录了数据库中数据的变动,便于对数据的基于时间点和基于位置的恢复,但是
- 在Python中函数可以作为参数进行传递,而也可以赋值给其他变量(类似Javascript,或者C/C++中的函数指针);类似Javascr
- 最近社会猪可是火遍了大江南北,不蹭下热度可对不起它。见过手画的佩奇,见过用代码画的吗?没有?那就来看我大显身手。用python的turtle
- 百度语音对上传的语音要求目前必须是单声道,16K采样率,采样深度可以是16位或者8位的PCM编码。其他编码输出的语音识别不出来。语音的处理技
- 本文实例讲述了golang简单位运算。分享给大家供大家参考,具体如下:// http://play.golang.org/p/idG7Ri_
- 我们可以利用Session对象来进行注册验证。Session对象会帮我们把某一用户的信息保留下来,让后续的网页读取。我们就可以在用户注册成功
- 最近在网上经常看到朋友们聊到UEO,我就想哈UEO是啥东西啊,我去找啦些资料看,他们都说将来UEO发展一定会比较好,我也说这是肯定的.我为什
- 最近,同事需要从数个表中查询用户的业务和报告数据,写了一个SQL语句,查询比较慢:Select S.Name,S.AccountantCod
- 通过my.ini更改默认字符集这里通过my.ini文件来设置默认字符集打开 my.ini在 [mysqld] 下面写上character-s
- 如何用python做后端写网页-flask框架 什么是Flask安装flask模块Hello World更深一步:数据绑定后端传入数据从前端
- 从基础的层面来讲,理解JavaScript的定时器是如何工作的是非常重要的。计时器的执行常常和我们的直观想象不同,那是因为JavaScrip
- 前言plt.contour是python中用于画等高线的函数,这里介绍一下plt.contour的使用。使用示例import numpy a
- 1、列表页面:this.$router.push({ name: 'userTemplate', params: { rep
- 工作中最常见的配置文件有四种:普通key=value的配置文件、Json格式的配置文件、HTML格式的配置文件以及YMAML配置文件。这其中