使用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中的异常处理简明介绍
Apr 13 Python
Python抓取淘宝下拉框关键词的方法
Jul 08 Python
Python实现以时间换空间的缓存替换算法
Feb 19 Python
TensorFlow入门使用 tf.train.Saver()保存模型
Apr 24 Python
Python OpenCV 使用滑动条来调整函数参数的方法
Jul 08 Python
python3安装crypto出错及解决方法
Jul 30 Python
python实现淘宝购物系统
Oct 25 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
Feb 10 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
Python列表推导式实现代码实例
Sep 09 Python
PyQt 如何创建自定义QWidget
Mar 24 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
openflashchart 2.0 简单案例php版
2012/05/21 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
通用JS事件写法实现代码
2009/01/07 Javascript
JavaScript的parseInt 进制问题
2009/05/07 Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
2013/06/13 Javascript
jquery、js操作checkbox全选反选
2014/03/12 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
JS中实现简单Formatter函数示例代码
2014/08/19 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
2016/06/20 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
javascript中Date对象的使用总结
2016/11/21 Javascript
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
vue中利用Promise封装jsonp并调取数据
2019/06/18 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
Python3基础之条件与循环控制实例解析
2014/08/13 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
利用python如何实现猫捉老鼠小游戏
2020/12/04 Python
用60行代码实现Python自动抢微信红包
2021/02/04 Python
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
斯凯奇新西兰官网:SKECHERS新西兰
2018/02/22 全球购物
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
金融系毕业生自荐书
2014/07/08 职场文书
入股合作协议书
2014/10/12 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书