Python用access判断文件是否被占用的实例方法


Posted in Python onDecember 17, 2020

有的小伙伴想知道用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用access判断文件是否被占用的实例方法的文章就介绍到这了,更多相关Python怎样用access判断文件是否被占用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
在Python的Flask框架中使用模版的入门教程
Apr 20 Python
python获取一组数据里最大值max函数用法实例
May 26 Python
python 读写中文json的实例详解
Oct 29 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
PyQt弹出式对话框的常用方法及标准按钮类型
Feb 27 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
May 10 Python
python 实现识别图片上的数字
Jul 30 Python
Python基本语法之运算符功能与用法详解
Oct 22 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
Apr 14 Python
在Tensorflow中实现leakyRelu操作详解(高效)
Jun 30 Python
python绘制雷达图实例讲解
Jan 03 Python
python数字图像处理之图像的批量处理
Jun 28 Python
Python实例教程之检索输出月份日历表
Dec 16 #Python
使用Python判断一个文件是否被占用的方法教程
Dec 16 #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
You might like
在PHP中利用XML技术构造远程服务(上)
2006/10/09 PHP
php桌面中心(四) 数据显示
2007/03/11 PHP
PHP UTF8中文字符截断函数代码
2012/09/11 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
node.js中的fs.readlink方法使用说明
2014/12/17 Javascript
jQuery中map()方法用法实例
2015/01/06 Javascript
js代码实现无缝滚动(文字和图片)
2015/08/20 Javascript
谈一谈jQuery核心架构设计
2016/03/28 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
[01:06]DOTA2小知识课堂 Ep.02 吹风竟可解梦境缠绕
2019/12/05 DOTA
python实现绘制树枝简单示例
2014/07/24 Python
python创建进程fork用法
2015/06/04 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
python help函数实例用法
2020/12/06 Python
Python 可视化神器Plotly详解
2020/12/26 Python
欧洲最大的笔和书写专家:The Pen Shop
2017/03/19 全球购物
通信工程专业个人找工作求职信范文
2013/09/21 职场文书
美术师范毕业生自荐信
2013/11/16 职场文书
求职信模版
2013/11/30 职场文书
单位领导证婚词
2014/01/14 职场文书
农村改厕实施方案
2014/03/22 职场文书
2014年体育工作总结
2014/11/24 职场文书
邀请函范文
2015/02/02 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
爱国电影观后感
2015/06/19 职场文书
2016年过年放假安排通知
2015/08/18 职场文书
PHP 时间处理类Carbon
2022/05/20 PHP