Python用access判断文件是否被占用的实例方法

 更新时间:2020年12月17日 08:31:32   作者:小妮浅浅  
在本篇文章里小编给大家整理的是一篇关于Python用access判断文件是否被占用的实例方法,有兴趣的朋友们可以学习下。

有的小伙伴想知道用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队列、进程间通信、线程案例

    这篇文章主要介绍了Python队列、进程间通信、线程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • python的exec、eval使用分析

    python的exec、eval使用分析

    这篇文章主要介绍了python的exec、eval使用分析,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Python多线程原理与用法实例剖析

    Python多线程原理与用法实例剖析

    这篇文章主要介绍了Python多线程原理与用法,结合具体的爬虫实例剖析了多线程的相关概念、原理、用法及操作注意事项,需要的朋友可以参考下
    2019-01-01
  • Python中定时任务框架APScheduler的快速入门指南

    Python中定时任务框架APScheduler的快速入门指南

    APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便。下面这篇文章主要跟大家介绍了Python中定时任务框架APScheduler的快速入门指南,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • Python中计数器Counter的使用技巧分享

    Python中计数器Counter的使用技巧分享

    计数器(Counter)是Python标准库collections模块中提供的一个强大工具,用于统计可哈希对象的出现次数,本文将介绍Python中计数器的基本用法、高级功能等内容,希望对大家有所帮助
    2023-11-11
  • python实现简单坦克大战

    python实现简单坦克大战

    这篇文章主要为大家详细介绍了python实现简单坦克大战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Python selenium实现大麦网自动购票过程解析

    Python selenium实现大麦网自动购票过程解析

    大麦网是中国综合类现场娱乐票务营销平台,业务覆盖演唱会、 话剧、音乐剧、体育赛事等领域,今天我们要用代码来实现他的购票过程,感兴趣的朋友一起看看吧
    2022-05-05
  • 基于Python中isfile函数和isdir函数使用详解

    基于Python中isfile函数和isdir函数使用详解

    今天小编就为大家分享一篇基于Python中isfile函数和isdir函数使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 如何将python脚本打包为exe可执行文件

    如何将python脚本打包为exe可执行文件

    这篇文章主要介绍了如何将python脚本打包为exe可执行文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Python递归及尾递归优化操作实例分析

    Python递归及尾递归优化操作实例分析

    这篇文章主要介绍了Python递归及尾递归优化操作,结合实例形式分析了Python递归及尾递归优化相关概念、原理、应用与操作技巧,需要的朋友可以参考下
    2020-02-02

最新评论