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实现简单HTML表格解析的方法
Jun 15 Python
一步步教你用Python实现2048小游戏
Jan 19 Python
Python算法应用实战之栈详解
Feb 04 Python
import的本质解析
Oct 30 Python
Python实现的多线程同步与互斥锁功能示例
Nov 30 Python
Django后台获取前端post上传的文件方法
May 28 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
通过实例解析Python return运行原理
Mar 04 Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 Python
Django实现内容缓存实例方法
Jun 30 Python
python开发入门——列表生成式
Sep 03 Python
解决pycharm 格式报错tabs和space不一致问题
Feb 26 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
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
第十节--抽象方法和抽象类
2006/11/16 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
smarty内置函数capture用法分析
2015/01/22 PHP
PHP中的类型提示(type hinting)功能介绍
2015/07/01 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
php intval函数用法总结
2019/04/14 PHP
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
JS中判断null的方法分析
2016/11/21 Javascript
ReactJs实现树形结构的数据显示的组件的示例
2017/08/18 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
jQuery实现列表的增加和删除功能
2018/06/14 jQuery
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
在Python3中初学者应会的一些基本的提升效率的小技巧
2015/03/31 Python
Python使用django获取用户IP地址的方法
2015/05/11 Python
python 以16进制打印输出的方法
2018/07/09 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
Pandas实现一列数据分隔为两列
2020/05/18 Python
python多线程和多进程关系详解
2020/12/14 Python
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
经典c++面试题二
2015/08/14 面试题
大三在校生电子商务求职信
2013/10/29 职场文书
结婚喜宴家长答谢词
2014/01/15 职场文书
三年大学自我鉴定
2014/01/16 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
保安2014年终工作总结
2014/12/06 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书
大学生个人学年总结
2015/02/15 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
mysq启动失败问题及场景分析
2021/07/15 MySQL
Python中npy和mat文件的保存与读取
2022/04/24 Python