Python判断文件或文件夹是否存在的三种方法


Posted in Python onJuly 27, 2017

常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错。所以最好在做任何操作之前,先判断文件是否存在。

这里将介绍三种判断文件或文件夹是否存在的方法,分别使用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为操作模式,有这么几种:

  • 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对象。此路径可以是文件名或目录路径。

  • 检查路径是否存在
path = pathlib.Path("path/file")
path.exist()
  • 检查路径是否是文件
path = pathlib.Path("path/file")
path.is_file()

总结

以上所述是小编给大家介绍的Python判断文件或文件夹是否存在的三种方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python中协程用法代码详解
Feb 10 Python
快速解决安装python没有scripts文件夹的问题
Apr 03 Python
python pandas中对Series数据进行轴向连接的实例
Jun 08 Python
pandas Dataframe行列读取的实例
Jun 08 Python
wxPython的安装与使用教程
Aug 31 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
May 13 Python
Python搭建代理IP池实现存储IP的方法
Oct 27 Python
python 利用turtle库绘制笑脸和哭脸的例子
Nov 23 Python
tensorflow 模型权重导出实例
Jan 24 Python
如何利用python之wxpy模块玩转微信
Aug 17 Python
Python私有属性私有方法应用实例解析
Sep 15 Python
Python Pandas模块实现数据的统计分析的方法
Jun 24 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
Jul 27 #Python
Python基于tkinter模块实现的改名小工具示例
Jul 27 #Python
python django 增删改查操作 数据库Mysql
Jul 27 #Python
Python中Selenium模拟JQuery滑动解锁实例
Jul 26 #Python
Python列表和元组的定义与使用操作示例
Jul 26 #Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 #Python
python基础之入门必看操作
Jul 26 #Python
You might like
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
PHP 中使用ajax时一些常见错误总结整理
2017/02/27 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
判断JS对象是否拥有某种属性的两种方式
2013/12/02 Javascript
jQuery html()方法使用不了无法显示内容的问题
2014/08/06 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
JS中artdialog弹出框控件之提交表单思路详解
2016/04/18 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
2017/01/04 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
JS用最简单的方法实现四舍五入
2019/08/27 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
2021/02/15 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
Python在Console下显示文本进度条的方法
2016/02/14 Python
解决Python requests 报错方法集锦
2017/03/19 Python
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
Django中Model的使用方法教程
2018/03/07 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
求高于平均分的学生学号及成绩
2016/09/01 面试题
预备党员入党思想汇报
2014/01/04 职场文书
俞敏洪一分钟演讲稿
2014/08/26 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
银行中层干部培训心得体会
2016/01/11 职场文书
vue首次渲染全过程
2021/04/21 Vue.js
mysql如何能有效防止删库跑路
2021/10/05 MySQL