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中操作字符串之rstrip()方法的使用
May 19 Python
深入解析Python中的descriptor描述器的作用及用法
Jun 27 Python
python爬虫入门教程--优雅的HTTP库requests(二)
May 25 Python
python生成二维码的实例详解
Oct 29 Python
利用Python如何实现一个小说网站雏形
Nov 23 Python
python中logging模块的一些简单用法的使用
Feb 22 Python
Python动态赋值的陷阱知识点总结
Mar 17 Python
三步实现Django Paginator分页的方法
Jun 11 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
解决Keras 自定义层时遇到版本的问题
Jun 16 Python
Idea安装python显示无SDK问题解决方案
Aug 12 Python
python内置进制转换函数的操作
Jun 02 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数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
基于Snoopy的PHP近似完美获取网站编码的代码
2011/10/23 PHP
php获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
利用PHP自动生成印有用户信息的名片
2016/08/01 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
php对微信支付回调处理的方法
2018/08/23 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
jQuery Ajax之$.get()方法和$.post()方法
2009/10/12 Javascript
Jquery实现无刷新DropDownList联动实现代码
2010/03/08 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
Bootstrap笔记—折叠实例代码
2017/03/13 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
2017/10/25 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
基于better-scroll 实现歌词联动功能的代码
2020/05/07 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
vant 时间选择器--开始时间和结束时间实例
2020/11/04 Javascript
基于python 字符编码的理解
2017/09/02 Python
Python设计模式之工厂模式简单示例
2018/01/09 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
numpy库reshape用法详解
2020/04/19 Python
django模板获取list中指定索引的值方式
2020/05/14 Python
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
全球最大的游戏市场:G2A
2018/07/05 全球购物
remote接口和home接口主要作用
2013/05/15 面试题
商场消防管理制度
2014/01/12 职场文书
王老吉广告词
2014/03/20 职场文书
党员干部公开承诺书
2014/03/26 职场文书
劳模先进事迹材料
2014/12/24 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
2015年派出所工作总结
2015/04/24 职场文书