检查我是否可以用Python向目录写入文件
我需要检查一下,能不能用Python把文件写到用户指定的目录里。
有没有什么方法可以提前检查一下呢?我可能会用try .. catch来处理这个问题,但我希望能有更好的办法,能提前确认一下。
4 个回答
2
用Python的方式就是直接去访问,然后如果失败了就捕捉到那个错误。
如果你真的需要检查一下,可以用 os.access
,不过它的结果不一定总是准确,要注意在Vista和Win7的UAC(用户帐户控制)上可能会有问题!
举个例子:
os.access(r'C:\Programme', os.R_OK)
这个代码会告诉你是否有读取的权限。
3
你可能找不到比这个更好的方法了,这种写法也更符合Python的风格。Python的理念是“请求原谅比请求许可更容易”。
如果你愿意的话,可以使用os.access。结合os.path.isfile来检查你是否有一个文件,而不是一个目录。这种方法可能能满足你的需求。不过,使用异常处理的方式会更好。
22
尽管Jim Brissom说异常处理在Python中很便宜,但如果你预计某个操作失败的几率超过几%,其实并不是这样。(不过,最后会有个例外!)这里的关键是,你无论如何都需要检查异常,因为在你检查和写入之间,权限可能会发生变化:
### !!! This is an example of what not to do!
### !!! Don't do this!
if os.access("test", os.W_OK):
# And in here, some jerk does chmod 000 test
open("test", "w").write(my_data)
# Exception happens despite os.access!
如果你想给用户准备一个文件夹列表,并想提前排除掉无效的文件夹,使用os.access和stat模块是很好的选择。但是,当真正开始运行程序时,如果你想让程序更稳定,这些方法并不能替代异常处理。
现在来说说例外情况:虽然异常处理比较慢,但硬盘的速度更慢。如果你的硬盘负载特别重,可能会发生你感兴趣的文件在os.access和打开文件之间被操作系统或硬盘缓存清除的情况。在这种情况下,你会遇到很大的延迟,因为你需要两次去硬盘(现在这也可能意味着网络)。