使用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 translator使用实例
Sep 06 Python
go语言计算两个时间的时间差方法
Mar 13 Python
Python实现图像几何变换
Jul 06 Python
Python使用PyCrypto实现AES加密功能示例
May 22 Python
详解Python if-elif-else知识点
Jun 11 Python
python梯度下降法的简单示例
Aug 31 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
启动Atom并运行python文件的步骤
Nov 09 Python
python微信好友数据分析详解
Nov 19 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
Selenium 滚动页面至元素可见的方法
Mar 18 Python
python tqdm库的使用
Nov 30 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面向对象的方法重载两种版本比较
2008/09/08 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
2014/07/29 PHP
JavaScript 以对象为索引的关联数组
2010/05/19 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
实现动画效果核心方式的js代码
2013/09/27 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
2016/04/26 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
详解微信UnionID作用
2019/05/15 Javascript
layui数据表格重载实现往后台传参
2019/11/15 Javascript
高性能web服务器框架Tornado简单实现restful接口及开发实例
2014/07/16 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
Django values()和value_list()的使用
2020/03/31 Python
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
公务员职务工作的自我评价
2013/11/01 职场文书
清华大学自主招生自荐信
2014/01/29 职场文书
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
《胖乎乎的小手》教学反思
2014/02/26 职场文书
公关活动策划方案
2014/05/25 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
学生检讨书怎么写
2014/10/09 职场文书
晚会开幕词
2015/01/28 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书
职场:企业印章管理制度(模板)
2019/10/18 职场文书
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python
解决Maven项目中 Invalid bound statement 无效的绑定问题
2021/06/15 Java/Android
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js
vue使用echarts实现折线图
2022/03/21 Vue.js
MySQL示例讲解数据库约束以及表的设计
2022/06/16 MySQL