使用Python判断一个文件是否被占用的方法教程


Posted in Python onDecember 16, 2020

今天有同学问,用os模块的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判断一个文件是否被占用的文章就介绍到这了,更多相关Python判断文件被占用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中实现结构相似的函数调用方法
Mar 10 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
Jun 30 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
对web.py设置favicon.ico的方法详解
Dec 04 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
numpy:np.newaxis 实现将行向量转换成列向量
Nov 30 Python
Python requests获取网页常用方法解析
Feb 20 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
Jun 17 Python
Selenium及python实现滚动操作多种方法
Jul 21 Python
通过代码简单了解django model序列化作用
Nov 12 Python
使用Python的开发框架Brownie部署以太坊智能合约
May 28 Python
Python实战之OpenCV实现猫脸检测
Jun 26 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
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
Dec 16 #Python
python unichr函数知识点总结
Dec 16 #Python
You might like
PHP 面向对象 final类与final方法
2010/05/05 PHP
php实现的mongodb操作类
2015/05/28 PHP
PHP目录操作实例总结
2016/09/27 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
Jquery ThickBox插件使用心得(不建议使用)
2010/09/08 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
JavaScript用构造函数如何获取变量的类型名
2016/12/23 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
2020/07/21 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
2020/11/05 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
在Python的Django框架中用流响应生成CSV文件的教程
2015/05/02 Python
Python查询阿里巴巴关键字排名的方法
2015/07/08 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
2019/11/22 Python
办公室人员先进事迹
2014/01/27 职场文书
大学生学期自我鉴定
2014/03/19 职场文书
出资证明书范本(标准版)
2014/09/24 职场文书
四风自我剖析材料思想汇报
2014/10/01 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
走近毛泽东观后感
2015/06/04 职场文书
贫困证明怎么写
2015/06/16 职场文书
退休欢送会主持词
2015/07/01 职场文书
文艺委员竞选稿
2015/11/19 职场文书
同学联谊会邀请函
2019/06/24 职场文书
怎样做好公众演讲能力?
2019/08/28 职场文书
导游词之江南周庄
2019/12/06 职场文书
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers