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中使用pprint函数进行格式化输出的教程
Apr 07 Python
通过Python爬虫代理IP快速增加博客阅读量
Dec 14 Python
Python输出带颜色的字符串实例
Oct 10 Python
python中学习K-Means和图片压缩
Nov 20 Python
对numpy中布尔型数组的处理方法详解
Apr 17 Python
python编写暴力破解zip文档程序的实例讲解
Apr 24 Python
Python Logging 日志记录入门学习
Jun 02 Python
django之使用celery-把耗时程序放到celery里面执行的方法
Jul 12 Python
Python爬虫 批量爬取下载抖音视频代码实例
Aug 16 Python
python判断all函数输出结果是否为true的方法
Dec 03 Python
详解Python GUI编程之PyQt5入门到实战
Dec 10 Python
Python创建简单的神经网络实例讲解
Jan 04 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
PHP whois查询类定义与用法示例
2019/04/03 PHP
js css 实现遮罩层覆盖其他页面元素附图
2014/09/22 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
JS实现仿QQ效果的三级竖向菜单
2015/09/25 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
简单实现Bootstrap标签页
2020/08/09 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
浅谈javascript中的事件冒泡和事件捕获
2016/12/28 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
element 结合vue 在表单验证时有值却提示错误的解决办法
2018/01/22 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
python用700行代码实现http客户端
2021/01/14 Python
业务副厂长岗位职责
2014/01/03 职场文书
高二美术教学反思
2014/01/14 职场文书
小学教师师德承诺书
2014/05/23 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
地陪导游欢迎词
2015/01/26 职场文书
给领导敬酒词
2015/08/12 职场文书
教师岗位说明书
2015/09/30 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
解决python存数据库速度太慢的问题
2021/04/23 Python