使用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实现上传样本到virustotal并查询扫描信息的方法
Oct 05 Python
Python导入oracle数据的方法
Jul 10 Python
python 的列表遍历删除实现代码
Apr 12 Python
Tensorflow卷积神经网络实例进阶
May 24 Python
使用django-guardian实现django-admin的行级权限控制的方法
Oct 30 Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 Python
python实现小球弹跳效果
May 10 Python
Python文件读写w+和r+区别解析
Mar 26 Python
python datetime处理时间小结
Apr 16 Python
python os模块在系统管理中的应用
Jun 22 Python
使用Python操作MySQL的小技巧
Sep 10 Python
Python爬虫中urllib3与urllib的区别是什么
Jul 21 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+mysqli数据库连接的两种方式
2015/01/28 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
thinkphp的dump函数无输出实例代码
2016/11/15 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
JavaScript flash复制库类 Zero Clipboard
2011/01/17 Javascript
JS 获取select(多选下拉)中所选值的示例代码
2013/08/02 Javascript
js、css、img等浏览器缓存问题的2种解决方案
2013/10/23 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
angular使用md5,CryptoJS des加密的方法
2019/06/03 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
python实现事件驱动
2018/11/21 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
python3实现mysql导出excel的方法
2019/07/31 Python
Python实现壁纸下载与轮换
2020/10/19 Python
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
护理专业毕业生推荐信
2013/10/31 职场文书
化学教师教学反思
2014/01/17 职场文书
2014年度工作总结报告
2014/12/15 职场文书
刑事辩护词范文
2015/05/21 职场文书
家长会后的感想
2015/08/11 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
导游词之白茶谷九龙峡
2019/10/23 职场文书
导游词之介休绵山
2019/12/31 职场文书
jquery插件实现悬浮的菜单
2021/04/24 jQuery
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android