使用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代码的打包与发布详解
Jul 30 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
Sep 04 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
Jul 03 Python
python脚本之一键移动自定格式文件方法实例
Sep 02 Python
python plotly画柱状图代码实例
Dec 13 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
Jul 14 Python
Python requests及aiohttp速度对比代码实例
Jul 16 Python
解决numpy数组互换两行及赋值的问题
Apr 17 Python
Python Matplotlib库实现画局部图
Nov 17 Python
python函数的两种嵌套方法使用
Apr 02 Python
Pytorch中expand()的使用(扩展某个维度)
Jul 15 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
Ajax PHP简单入门教程代码
2008/04/25 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
php 定义404页面的实现代码
2012/11/19 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
javascript使用定时函数实现跳转到某个页面
2013/12/25 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
vue.js中created方法作用
2018/03/30 Javascript
vue-cli2.9.3 详细教程
2018/04/23 Javascript
webpack 开发和生产并行设置的方法
2018/11/08 Javascript
vue实现下拉加载其实没那么复杂
2019/08/13 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
Python列表(list)常用操作方法小结
2015/02/02 Python
Python抽象类的新写法
2015/06/18 Python
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
Django框架使用内置方法实现登录功能详解
2019/06/12 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
巴西购物网站:Estrela10
2018/12/13 全球购物
2014年高二班主任工作总结
2014/12/16 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python
python办公自动化之excel的操作
2021/05/23 Python
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis
react 路由Link配置详解
2021/11/11 Javascript