最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python怎样用access判断文件是否被占用?

    正文概述 小妮浅浅   2020-12-17   473

    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判断文件是否被占用?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元