Python用access判断文件是否被占用的实例方法


Posted in Python onDecember 17, 2020

有的小伙伴想知道用access()函数可以判断一个文件被占用吗?理论上来说是不行的,access()返回的是文件的读写属性。为了让小伙伴们信服,小编进行了简单的测试。

>>> import os
>>> fn = r'D:\temp\csdn\t.py' # 测试用的文件
>>> os.access(fn, os.F_OK) # 文件是否存在
True
>>> os.access(fn, os.R_OK) # 文件是否可读
True
>>> os.access(fn, os.W_OK) # 文件是否可写
True
>>> os.access(fn, os.X_OK) # 文件是否可执行
True
>>> fp = open(fn, 'a+') # 以追加写的方式打开文件
>>> os.access(fn, os.F_OK) # 文件当然还在
True
>>> os.access(fn, os.R_OK) # 文件依然可读
True
>>> os.access(fn, os.W_OK) # 文件依然可写
True
>>> os.access(fn, os.X_OK) # 文件依然执行
True
>>> fp.close()

可见,os.access()返回的是文件读写属性,与文件是否被占用没有半毛钱关系。

后来,群里有同学建议说,不妨用try尝试着open文件,如果成功,表示文件没有被占用,如果抛出异常,则表示文件被占用。果真如此吗?还是用代码验证一下吧。

>>> fp1 = open(fn, 'a+')
>>> fp2 = open(fn, 'a+')
>>> fp1.close()
>>> fp2.close()

结果表明,对同一个文件以写的方式打开多次,系统并没有抛出异常。为什么会这样呢?究其原因,是因为文件被打开和文件被占用是完全两个不同的问题。顺便提醒一下,做上面的测试时,不要使用'w'的方式,否则文件内容会被清空。

那么,究竟应该如何用Python判断一个文件是否被占用呢?这个问题还是要回归到操作系统层面来解决,也就是依赖win32api模块。

>>> import win32file
>>> def is_used(file_name):
  try:
    vHandle = win32file.CreateFile(file_name, win32file.GENERIC_READ, 0, None, win32file.OPEN_EXISTING, win32file.FILE_ATTRIBUTE_NORMAL, None)
    return int(vHandle) == win32file.INVALID_HANDLE_VALUE
  except:
    return True
  finally:
    try:
      win32file.CloseHandle(vHandle)
    except:
      pass
>>> fn = r'D:\temp\csdn\t.py'
>>> is_used(fn)
False
>>> fp = open(fn, 'a+')
>>> is_used(fn)
True
>>> fp.close()
>>> is_used(fn)
False

简单验证了一下,函数is_used()基本可用。

到此这篇关于Python用access判断文件是否被占用的实例方法的文章就介绍到这了,更多相关Python怎样用access判断文件是否被占用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
用python实现批量重命名文件的代码
May 25 Python
跟老齐学Python之传说中的函数编写条规
Oct 11 Python
Python实现递归遍历文件夹并删除文件
Apr 18 Python
基于Python对象引用、可变性和垃圾回收详解
Aug 21 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
Jan 17 Python
flask框架中勾子函数的使用详解
Aug 01 Python
python opencv读mp4视频的实例
Dec 07 Python
python-opencv 将连续图片写成视频格式的方法
Jan 08 Python
python selenium 弹出框处理的实现
Feb 26 Python
python3字符串操作总结
Jul 24 Python
详解python变量与数据类型
Aug 25 Python
python 实现关联规则算法Apriori的示例
Sep 30 Python
Python实例教程之检索输出月份日历表
Dec 16 #Python
使用Python判断一个文件是否被占用的方法教程
Dec 16 #Python
python中类与对象之间的关系详解
Dec 16 #Python
python简单实现插入排序实例代码
Dec 16 #Python
python中函数返回多个结果的实例方法
Dec 16 #Python
python的setattr函数实例用法
Dec 16 #Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
Dec 16 #Python
You might like
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
2016/03/06 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
yii通过小物件生成view的方法
2016/10/08 PHP
thinkphp下MySQL数据库读写分离代码剖析
2017/04/18 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
Pyhton中单行和多行注释的使用方法及规范
2016/10/11 Python
Numpy掩码式数组详解
2018/04/17 Python
python使用PIL给图片添加文字生成海报示例
2018/08/17 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
python openpyxl使用方法详解
2019/07/18 Python
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
高级3D打印市场:Gambody
2019/12/26 全球购物
某公司.Net方向面试题
2014/04/24 面试题
农民工创业典型事迹
2014/01/25 职场文书
文秘大学生求职信
2014/02/25 职场文书
学员自我鉴定
2014/03/19 职场文书
春节晚会主持词
2014/03/24 职场文书
产品质量承诺书
2014/03/27 职场文书
乡镇食品安全责任书
2014/07/28 职场文书
综合实践活动报告
2015/02/05 职场文书
员工加薪申请报告
2015/05/15 职场文书
送给客户微信问候语!
2019/07/04 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers