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操作json数据的一个简单例子
Apr 17 Python
Python的Bottle框架的一些使用技巧介绍
Apr 08 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
Dec 08 Python
django使用admin站点上传图片的实例
Jul 28 Python
Python字典的概念及常见应用实例详解
Oct 30 Python
pandas实现将日期转换成timestamp
Dec 07 Python
TensorFlow查看输入节点和输出节点名称方式
Jan 04 Python
利用setuptools打包python程序的方法步骤
Jan 18 Python
Python eval函数介绍及用法
Nov 09 Python
pymysql模块使用简介与示例
Nov 17 Python
python 实现简易的记事本
Nov 30 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
3.从实例开始
2006/10/09 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
2012/06/05 PHP
有关PHP性能优化的介绍
2013/06/20 PHP
PHP开发框架Laravel数据库操作方法总结
2014/09/03 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
JavaScript 面向对象之命名空间
2010/05/04 Javascript
jquery实现心算练习代码
2010/12/06 Javascript
ExtJs中gridpanel分组后组名排序实例代码
2013/12/02 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
用Axios Element实现全局的请求loading的方法
2018/03/15 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
vue中$nextTick的用法讲解
2019/01/17 Javascript
Vue登录主页动态背景短视频制作
2019/09/21 Javascript
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
Python实现多线程抓取妹子图
2015/08/08 Python
Python变量和字符串详解
2017/04/29 Python
django 微信网页授权登陆的实现
2019/07/30 Python
前端制作动画的几种方式(css3,js)
2016/12/12 HTML / CSS
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
工程造价专业大学生自荐信
2013/10/01 职场文书
心理学专业毕业生推荐信范文
2013/11/21 职场文书
工厂实习感言
2014/01/14 职场文书
高一地理教学反思
2014/01/18 职场文书
会计求职信范文
2014/05/24 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
酒店餐厅2014重阳节活动策划方案
2014/09/16 职场文书
2014年个人售房协议书
2014/10/30 职场文书
2014年档案室工作总结
2014/12/01 职场文书