使用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 26 Python
Python EOL while scanning string literal问题解决方法
Sep 18 Python
python数组复制拷贝的实现方法
Jun 09 Python
在windows下Python打印彩色字体的方法
May 15 Python
Python2.7.10以上pip更新及其他包的安装教程
Jun 12 Python
对web.py设置favicon.ico的方法详解
Dec 04 Python
Pytorch训练过程出现nan的解决方式
Jan 02 Python
Tensorflow不支持AVX2指令集的解决方法
Feb 03 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
Feb 10 Python
解决import tensorflow as tf 出错的原因
Apr 16 Python
Python内置的数据类型及使用方法
Apr 13 Python
python 使用pandas读取csv文件的方法
Dec 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
main.php
2006/12/09 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
PHP使用xmllint命令处理xml与html的方法
2014/12/15 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
PHP中isset与array_key_exists的区别实例分析
2015/06/02 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
2019/01/15 PHP
JS控制表格隔行变色
2006/06/26 Javascript
告诉大家什么是JSON
2008/06/10 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
javascript回到顶部特效
2016/07/30 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
2017/12/25 jQuery
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
JavaScript实现表单注册、表单验证、运算符功能
2018/10/15 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
2019/05/22 Javascript
vue之延时刷新实例
2019/11/14 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
让 python 命令行也可以自动补全
2014/11/30 Python
Python中的zipfile模块使用详解
2015/06/25 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
python mysql中in参数化说明
2020/06/05 Python
Keras模型转成tensorflow的.pb操作
2020/07/06 Python
Python列表推导式实现代码实例
2020/09/09 Python
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
车间主管岗位职责
2013/11/14 职场文书
军训心得体会
2013/12/31 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
社区低保工作总结2015
2015/07/23 职场文书