↑↑↑关注后"星标"简说Python
人人都可以简单入门Python、爬虫、数据分析
简说Python推荐作者:SevDot链接:https://www.jianshu.com/p/3bc7404af887
大家好,我是老表~
下面是我2020总结,以及2021规划,大家可以看看,也许有参考价值,另外还给大家准备了一份新年大礼,点击下面图片,进入留言即可参与,今晚开奖,2021,一起暴富。
我的2020总结,戳图片,留言抽大奖,今晚开奖
言归正传,开始今天的分享~
今天有同学问,用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 2021第一波学习交流群入群开启,加微信:pythonbrief,回复:2021,即可加入。
入群规则:满足以下三个条件任意一个即可进入学习交流群
1)本公众号留言总次数199+的读者可以直接添加好友进入;
2)2021年留言次数9+次的读者可以直接添加好友进入;
3)成功添加好友后,支付9.9元入群费用的读者可以直接进入(自动退群时会归还9.9元);
入群截止时间:2021.1.8 20:00
【注】设置入群规则主要是为了排除伸手党和推广营销的人,学习交流群不欢迎伸手党和推广者加入,一经发现直接清除、拉黑。
【最新投稿福利】
1>投稿规则:Java、前端、Python等方向的技术文章;内容不少于500字;可以是实战,也可以是欢快程序员类型,也可以是知识点科普;需要是首次发布在微信公众号平台,以原创发布,会注明作者及相关作者简介。
2>福利:按文章质量每1000字(不含代码)激励50-100元不等,投稿被采纳4次及以上者,可以另外获得赠书和简说编程专栏勋章,投稿越多,激励越多。
扫码,备注:投稿
长按扫码关注,一起学Python
学习更多:
整理了我开始分享学习笔记到现在超过250篇优质文章,涵盖数据分析、爬虫、机器学习等方面,别再说不知道该从哪开始,实战哪里找了
爱点赞的人,运气都不会太差