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 smallseg分词用法实例分析
May 28 Python
详解Django通用视图中的函数包装
Jul 21 Python
Python实现端口检测的方法
Jul 24 Python
详解Python中的type和object
Aug 15 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
Dec 29 Python
对python for 文件指定行读写操作详解
Dec 29 Python
Python制作动态字符图的实例
Jan 27 Python
python操作日志的封装方法(两种方法)
May 23 Python
基于python cut和qcut的用法及区别详解
Nov 22 Python
Sentry错误日志监控使用方法解析
Nov 12 Python
python实现数学模型(插值、拟合和微分方程)
Nov 13 Python
如何用python绘制雷达图
Apr 24 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/04 无线电
两个强悍的php 图像处理类1
2009/06/15 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
2016/01/08 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
laravel框架数据库配置及操作数据库示例
2019/10/10 PHP
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
表单元素的submit()方法和onsubmit事件应用概述
2013/02/01 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
JS调用页面表格导出excel示例代码
2014/03/18 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
使用jQuery获得内容以及内容的属性
2015/02/26 Javascript
13个PHP函数超实用
2015/10/21 Javascript
jQuery的框架介绍
2016/05/11 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
async/await与promise(nodejs中的异步操作问题)
2017/03/03 NodeJs
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
使用Angular CLI生成 Angular 5项目教程详解
2018/03/18 Javascript
详解JavaScript的变量
2019/04/04 Javascript
Python实现Const详解
2015/01/27 Python
使用Selenium破解新浪微博的四宫格验证码
2018/10/19 Python
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
Python遍历文件夹 处理json文件的方法
2019/01/22 Python
python调用自定义函数的实例操作
2019/06/26 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
Python  word实现读取及导出代码解析
2020/07/09 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
美国男士和女士奢侈品折扣手表购物网站:Certified Watch Store
2018/06/13 全球购物
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
优秀社区干部事迹材料
2014/02/03 职场文书
全神贯注教学反思
2014/02/03 职场文书
《春笋》教学反思
2014/04/15 职场文书
放飞梦想演讲稿600字
2014/08/26 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
2021/06/21 Oracle