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实现两个list求交集,并集,差集的方法示例
Aug 02 Python
Python运维开发之psutil库的使用详解
Oct 18 Python
python实现flappy bird小游戏
Dec 24 Python
Laravel+Dingo/Api 自定义响应的实现
Feb 17 Python
python3用PIL把图片转换为RGB图片的实例
Jul 04 Python
python面向对象 反射原理解析
Aug 12 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
Nov 25 Python
Python如何爬取qq音乐歌词到本地
Jun 01 Python
python 实现压缩和解压缩的示例
Sep 22 Python
Python字典取键、值对的方法步骤
Sep 30 Python
聊一聊python常用的编程模块
May 14 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
Apr 07 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
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
2015/12/10 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
js基于setTimeout与setInterval实现多线程
2016/06/17 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
jQuery实现的placeholder效果完整实例
2016/08/02 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
JS/CSS实现字符串单词首字母大写功能
2019/09/03 Javascript
JS代码优化的8点建议
2020/02/04 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
Python configparser模块操作代码实例
2020/06/08 Python
pymysql模块使用简介与示例
2020/11/17 Python
新奇的小玩意:IWOOT
2016/07/21 全球购物
海外淘书首选:AbeBooks
2017/07/31 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
建筑工程专业学生的自我评价
2013/12/25 职场文书
培训演讲稿范文
2014/01/12 职场文书
自行车租赁公司创业计划书
2014/01/28 职场文书
省优秀教师事迹材料
2014/01/30 职场文书
材料会计岗位职责
2014/03/06 职场文书
供电工程专业求职信
2014/08/09 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
普通党员自我剖析材料
2014/10/07 职场文书
JS数组方法some、every和find的使用详情
2021/10/05 Javascript
如何利用React实现图片识别App
2022/02/18 Javascript