使用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 相关文章推荐
详解Django框架中用context来解析模板的方法
Jul 20 Python
Python实现简单的HttpServer服务器示例
Sep 25 Python
python实现事件驱动
Nov 21 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
Jun 12 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
PyTorch中Tensor的维度变换实现
Aug 18 Python
python绘制彩虹图
Dec 16 Python
appium+python自动化配置(adk、jdk、node.js)
Nov 17 Python
python基础详解之if循环语句
Apr 24 Python
python文件目录操作之os模块
May 08 Python
python for循环赋值问题
Jun 03 Python
一起来学习Python的元组和列表
Mar 13 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计算指定目录下文件占用空间的方法
2015/03/13 PHP
PHP通过API获取手机号码归属地
2015/05/28 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
用脚本调用样式的几种方法
2006/12/09 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
python批量生成本地ip地址的方法
2015/03/23 Python
Python实现提取文章摘要的方法
2015/04/21 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
详解python eval函数的妙用
2017/11/16 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
2018/01/10 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
python三大神器之fabric使用教程
2019/06/10 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
2020/12/31 Python
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
英国健康和美容技术产品购物网站:CurrentBody
2019/07/17 全球购物
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
普通大学毕业生自荐信
2013/11/04 职场文书
六十岁生日答谢词
2014/01/10 职场文书
《我不是最弱小的》教学反思
2014/02/23 职场文书
2014幼儿园中班工作总结
2014/11/10 职场文书
护士求职简历自我评价
2015/03/10 职场文书
小学大队长竞选稿
2015/11/20 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js