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 28 Python
python数据结构之图的实现方法
Jul 08 Python
python解决Fedora解压zip时中文乱码的方法
Sep 18 Python
python+pandas分析nginx日志的实例
Apr 28 Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
Feb 17 Python
Python tkinter实现简单加法计算器代码实例
May 13 Python
Python使用Chrome插件实现爬虫过程图解
Jun 09 Python
python对 MySQL 数据库进行增删改查的脚本
Oct 22 Python
python excel多行合并的方法
Dec 09 Python
python读取图片颜色值并生成excel像素画的方法实例
Feb 19 Python
Python爬虫基础之初次使用scrapy爬虫实例
Jun 26 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
初品cakephp 入门基础
2012/02/16 PHP
php计算十二星座的函数代码
2012/08/21 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
javascript 表单规则集合对象
2009/07/21 Javascript
什么是DOM(Document Object Model)文档对象模型
2012/03/05 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
原生javascript实现匀速运动动画效果
2016/02/26 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
2016/10/31 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
Python中的集合介绍
2019/01/28 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
python实现弹跳小球
2019/05/13 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
HMV日本官网:全球知名的音乐、DVD和电脑游戏零售巨头
2016/08/13 全球购物
Sixt美国租车:高端豪华车型自驾体验
2017/09/02 全球购物
世界各地的当地人的食物体验:Eatwith
2019/07/26 全球购物
澳大利亚有机化妆品网上商店:The Well Store
2020/02/20 全球购物
求职信范文怎么写
2014/01/29 职场文书
2014年酒店服务员工作总结
2014/12/08 职场文书
爱的承诺书
2015/01/20 职场文书
解析目标检测之IoU
2021/06/26 Python