使用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中的jquery PyQuery库使用小结
May 13 Python
Windows下使Python2.x版本的解释器与3.x共存的方法
Oct 25 Python
Python实现Linux的find命令实例分享
Jun 04 Python
人生苦短我用python python如何快速入门?
Mar 12 Python
python针对excel的操作技巧
Mar 13 Python
详解PyTorch批训练及优化器比较
Apr 28 Python
Python 支付整合开发包的实现
Jan 23 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
简单了解python变量的作用域
Jul 30 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
Jul 02 Python
Python如何实现大型数组运算(使用NumPy)
Jul 24 Python
Python命名空间及作用域原理实例解析
Aug 12 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的memcache类分享(memcache队列)
2014/03/26 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
一段实用的php验证码函数
2016/05/19 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
js实现网站首页图片滚动显示
2013/02/04 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
jQuery 判断是否包含在数组中Array[]的方法
2016/08/03 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
easyui简介_动力节点Java学院整理
2017/07/14 Javascript
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
vue+layui实现select动态加载后台数据的例子
2019/09/20 Javascript
js实现计算器功能
2020/08/10 Javascript
python如何重载模块实例解析
2018/01/25 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
生产总经理岗位职责
2013/12/19 职场文书
本科生就业推荐信
2014/05/19 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
三严三实学习心得体会
2014/10/13 职场文书
新教师个人工作总结
2015/02/06 职场文书
放假通知格式
2015/04/14 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
怎样写家长意见
2015/06/04 职场文书
企业安全生产检查制度
2015/08/06 职场文书
postgresql使用filter进行多维度聚合的解决方法
2021/07/16 PostgreSQL