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 11 Python
python实现简单ftp客户端的方法
Jun 28 Python
python 获取字符串MD5值方法
May 29 Python
Python wxPython库使用wx.ListBox创建列表框示例
Sep 03 Python
使用PM2+nginx部署python项目的方法示例
Nov 07 Python
Python Django框架实现应用添加logging日志操作示例
May 17 Python
Python Pickle 实现在同一个文件中序列化多个对象
Dec 30 Python
使用Keras加载含有自定义层或函数的模型操作
Jun 10 Python
浅析python中的del用法
Sep 02 Python
详解Python requests模块
Jun 21 Python
一小时学会TensorFlow2之基本操作2实例代码
Sep 04 Python
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
Nov 11 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
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
div li的多行多列 无刷新分页示例代码
2013/10/16 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
php文件上传及下载附带显示文件及目录功能
2017/04/27 PHP
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
热点新闻滚动特效的js代码
2013/08/17 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
使用node.js对音视频文件加密的实例代码
2017/08/30 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
jQuery实现鼠标滑动切换图片
2020/05/27 jQuery
微信小程序实现点击生成随机验证码
2020/09/09 Javascript
Python多线程学习资料
2012/12/19 Python
python测试驱动开发实例
2014/10/08 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
2018/07/12 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
2019/08/10 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
Python可以实现栈的结构吗
2020/05/27 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
2013/06/09 HTML / CSS
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
教师实习自我鉴定
2013/12/18 职场文书
幼儿园大班教学反思
2014/02/10 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
2016年圣诞节义工活动总结
2016/04/01 职场文书
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android