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调用fortran模块
Apr 08 Python
Python程序中设置HTTP代理
Nov 06 Python
python urllib爬取百度云连接的实例代码
Jun 19 Python
python基础教程项目五之虚拟茶话会
Apr 02 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
Oct 31 Python
python实现抖音点赞功能
Apr 07 Python
python3实现猜数字游戏
Dec 07 Python
python实现可变变量名方法详解
Jul 01 Python
Python如何实现强制数据类型转换
Nov 22 Python
python实现图像外边界跟踪操作
Jul 13 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 Python
深入理解pytorch库的dockerfile
Jun 10 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
phpQuery占用内存过多的处理方法
2013/11/13 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
2014/07/01 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
2019/05/08 PHP
javascript调试说明
2010/06/07 Javascript
模拟电子签章盖章效果的jQuery插件源码
2013/06/24 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
vue实现文字横向无缝走马灯组件效果的实例代码
2019/04/09 Javascript
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
flask中使用SQLAlchemy进行辅助开发的代码
2013/02/10 Python
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
python web框架学习笔记
2016/05/03 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
用Python实现最速下降法求极值的方法
2019/07/10 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
关于Assembly命名空间的三个面试题
2015/07/23 面试题
大学生村官承诺书
2014/03/28 职场文书
幼儿园个人师德总结
2015/02/06 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
创业计划书之家政服务
2019/09/18 职场文书
python中24小时制转换为12小时制的方法
2021/06/18 Python
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android