使用Python判断一个文件是否被占用的方法教程

 更新时间:2020年12月16日 16:13:56   作者:天元浪子  
这篇文章主要给大家介绍了关于如何使用Python判断一个文件是否被占用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

今天有同学问,用os模块的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判断一个文件是否被占用的文章就介绍到这了,更多相关Python判断文件被占用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python发送byte数据组到tcp的server问题

    python发送byte数据组到tcp的server问题

    这篇文章主要介绍了python发送byte数据组到tcp的server问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Python的ORM框架SQLObject入门实例

    Python的ORM框架SQLObject入门实例

    这篇文章主要介绍了Python的ORM框架SQLObject简单使用实例,使用Linux Mint 15、Python 2.7,需要的朋友可以参考下
    2014-04-04
  • 详解pyqt5 动画在QThread线程中无法运行问题

    详解pyqt5 动画在QThread线程中无法运行问题

    这篇文章主要介绍了详解pyqt5 动画在QThread线程中无法运行问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Python文件的读写和异常代码示例

    Python文件的读写和异常代码示例

    这篇文章主要介绍了Python文件的读写和异常代码示例,首先分享了文件读写的简单方法,然后略为详细地介绍了Python异常的相关内容,不足之处,欢迎补充。
    2017-10-10
  • pytest全局变量的使用详解

    pytest全局变量的使用详解

    全局变量是在函数外部定义的变量,所有函数内部都可以使用这个变量,本文就来介绍一下pytest全局变量的使用,感兴趣的可以了解一下
    2023-11-11
  • Python numpy.transpose使用详解

    Python numpy.transpose使用详解

    本文主要介绍了Python numpy.transpose使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • python中的load、loads实现反序列化示列

    python中的load、loads实现反序列化示列

    这篇文章主要介绍python中的load、loads实现反序列化,在python自动化中,我们传递一些参数是需要从文件中读取过来的,读取过来的字典并非python对象数据类型而是string类型,下面来看详情内容吧
    2021-10-10
  • python安装本地whl的实例步骤

    python安装本地whl的实例步骤

    在本篇文章里小编给大家整理的是关于python安装本地whl的实例步骤,有需要的朋友们可以学习下。
    2019-10-10
  • python机器学习包mlxtend的安装和配置详解

    python机器学习包mlxtend的安装和配置详解

    这篇文章主要介绍了python机器学习包mlxtend的安装和配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 一则python3的简单爬虫代码

    一则python3的简单爬虫代码

    最近一直在学习Python,还有网络爬虫,于是就想起来把2者结合一下,所以就有了本文。
    2014-05-05

最新评论