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设计模式之观察者模式实例
Apr 26 Python
详解Python的Django框架中的模版相关知识
Jul 15 Python
怎样使用Python脚本日志功能
Aug 14 Python
对python 各种删除文件失败的处理方式分享
Apr 24 Python
浅谈Pandas 排序之后索引的问题
Jun 07 Python
python 异或加密字符串的实例
Oct 14 Python
Python Matplotlib实现三维数据的散点图绘制
Mar 19 Python
python 求10个数的平均数实例
Dec 16 Python
基于python-pptx库中文文档及使用详解
Feb 14 Python
使用sublime text3搭建Python编辑环境的实现
Jan 12 Python
在Pycharm中安装Pandas库方法(简单易懂)
Feb 20 Python
Python激活Anaconda环境变量的详细步骤
Jun 08 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 $_FILES中error返回值详解
2014/01/30 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
Redis在Laravel项目中的应用实例详解
2017/08/11 PHP
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
2016/05/26 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
Bootstrap Scrollspy源码学习
2017/03/02 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
详解前后端分离之VueJS前端
2017/05/24 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
[01:01:24]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第三局
2016/02/25 DOTA
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
使用PYTHON创建XML文档
2012/03/01 Python
selenium+python自动化测试之多窗口切换
2019/01/23 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
python自动生成model文件过程详解
2019/11/02 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
Django URL参数Template反向解析
2020/11/24 Python
css3 transform属性详解
2014/09/30 HTML / CSS
css3通过scale()、rotate()实现放大、旋转
2020/03/19 HTML / CSS
Nike法国官方网站:Nike.com FR
2018/07/22 全球购物
老师给学生的表扬信
2014/01/17 职场文书
京剧自荐信
2014/01/26 职场文书
物理研修随笔感言
2014/02/14 职场文书
家长对孩子的评语
2014/04/18 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
销售辞职信范文
2015/03/02 职场文书
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle