使用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正则分组的应用
Nov 10 Python
python命令行参数sys.argv使用示例
Jan 28 Python
Python实现子类调用父类的方法
Nov 10 Python
Python 详解基本语法_函数_返回值
Jan 22 Python
python爬取网页转换为PDF文件
Jun 07 Python
详解用Python练习画个美队盾牌
Mar 23 Python
python创建n行m列数组示例
Dec 02 Python
对python中 math模块下 atan 和 atan2的区别详解
Jan 17 Python
Python callable内置函数原理解析
Mar 05 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
Apr 29 Python
python中numpy数组与list相互转换实例方法
Jan 29 Python
python人工智能human learn绘图可创建机器学习模型
Nov 23 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世纪万年历
2006/12/06 PHP
php中判断一个字符串包含另一个字符串的方法
2007/03/19 PHP
ubuntu10.04配置 nginx+php-fpm模式的详解
2013/06/03 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
js中cookie的使用详细分析
2008/05/28 Javascript
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
JavaScript 函数replace深入了解
2013/03/14 Javascript
基于jquery实现导航菜单高亮显示(两种方法)
2015/08/23 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
2016/08/23 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
python单元测试unittest实例详解
2015/05/11 Python
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
详解Python中类的定义与使用
2017/04/11 Python
Python 从相对路径下import的方法
2018/12/04 Python
初探利用Python进行图文识别(OCR)
2019/02/26 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
python之生成多层json结构的实现
2020/02/27 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
如何将json数据转换为python数据
2020/09/04 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
2020/09/23 Python
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
伦敦香水公司:The London Perfume Company
2019/11/13 全球购物
英国现代、当代和设计师家具店:Furntastic
2020/07/18 全球购物
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
《观舞记》教学反思
2014/04/16 职场文书
关于爱国的标语
2014/06/24 职场文书
2014年派出所工作总结
2014/11/21 职场文书
2014年个人年终总结
2015/03/09 职场文书
匿名信格式范文
2015/05/27 职场文书
56句经典英文座右铭
2019/08/09 职场文书
导游词之日本富士山
2020/01/06 职场文书