如何用Python判断一个文件是否被占用?非常实用!
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何用Python判断一个文件是否被占用?非常实用!,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1866字,纯文字阅读大概需要3分钟。
内容图文
![如何用Python判断一个文件是否被占用?非常实用!](/upload/InfoBanner/zyjiaocheng/616/2574ac3c0fb34493a49348fde5b046c0.jpg)
今天有同学问,用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模块。
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
>>> 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判断一个文件是否被占用?非常实用!所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。