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二分法实现实例
Nov 21 Python
Python处理CSV与List的转换方法
Apr 19 Python
基于python实现名片管理系统
Nov 30 Python
Python使用Selenium爬取淘宝异步加载的数据方法
Dec 17 Python
我喜欢你 抖音表白程序python版
Apr 07 Python
python 实现GUI(图形用户界面)编程详解
Jul 17 Python
python实现发送form-data数据的方法详解
Sep 27 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
Dec 26 Python
在python3中实现更新界面
Feb 21 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
Apr 20 Python
详解Anaconda 的安装教程
Sep 23 Python
pycharm部署django项目到云服务器的详细流程
Jun 29 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开发微信支付的流程
2015/10/04 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
PHP实现JS中escape与unescape的方法
2016/07/11 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
2013/03/19 Javascript
详解jquery uploadify 上传文件
2013/11/09 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
2017/01/21 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
微信小程序 自定义Toast实例代码
2017/06/12 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
Vue 进阶之路(三)
2019/04/18 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
python计算列表内各元素的个数实例
2018/06/29 Python
python中的json总结
2018/10/11 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
python中函数返回多个结果的实例方法
2020/12/16 Python
捐助贫困学生倡议书
2014/05/16 职场文书
银行求职自荐信
2014/06/30 职场文书
2015年班级元旦晚会活动总结
2014/11/28 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA