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获取邮件地址的方法
Jul 10 Python
Python中import导入上一级目录模块及循环import问题的解决
Jun 04 Python
对python中return和print的一些理解
Aug 18 Python
import的本质解析
Oct 30 Python
python2 与python3的print区别小结
Jan 16 Python
python递归实现快速排序
Aug 18 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
Dec 12 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
Jan 15 Python
python爬虫刷访问量 2019 7月
Aug 01 Python
使用已经得到的keras模型识别自己手写的数字方式
Jun 29 Python
Flask缓存静态文件的具体方法
Aug 02 Python
Numpy实现卷积神经网络(CNN)的示例
Oct 09 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
Laravel框架实现发送短信验证功能代码
2016/06/06 PHP
php+Memcached实现简单留言板功能示例
2017/02/15 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
JS二维数组的定义说明
2014/03/03 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
JS实现六边形3D拖拽翻转效果的方法
2016/09/11 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
Vue通过ref父子组件拿值方法
2018/09/12 Javascript
微信小程序实现bindtap等事件传参
2019/04/08 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
Python中的深拷贝和浅拷贝详解
2015/06/03 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
QML用PathView实现轮播图
2020/06/03 Python
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
仓库管理专业个人自我评价范文
2013/11/11 职场文书
个人实用的自我评价范文
2013/11/23 职场文书
办理暂住证介绍信
2014/01/11 职场文书
高中学生期末评语
2014/04/25 职场文书
奥巴马英文演讲稿
2014/05/15 职场文书
学习考察心得体会
2014/09/04 职场文书
班主任2015新年寄语
2014/12/08 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
求职推荐信范文
2015/03/27 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
Mysql数据库值的添加、修改、删除及清空操作实例
2021/06/20 MySQL
JS封装cavans多种滤镜组件
2022/02/15 Javascript
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS