python的os模块提供一些系统api,sys模块主要针对解释器的设置,运行是的动态信息。
下面记录几个有用的方法。
1、当我们打开一个文件的时候,有只读方式,写方式,读写方式,等等,如果我们是以只读方式打开的,那么在写入文件的时候肯定得出错,怎么把这个容错机制实现,一般的方法,可以使用异常捕捉IOError。这里介绍一个更友好的方式,os.access(path, mode)
1、os.W_OK 可写
2、os.R_OK 可读
3、os.F_OK 路径存在
4、os.X_OK 可执行
<span style="font-size:18px;">#利用异常方式</span>
<span style="font-size:18px;">try:
fp = open("myfile")
except IOError as e:
if e.errno == errno.EACCES:
return "some default data"
# Not a permission error.
raise
else:
with fp:
return fp.read()</span>
<span style="font-size:18px;">#利用os的api</span>
<span style="font-size:18px;">if os.access("myfile", os.R_OK):
with open("myfile") as fp:
return fp.read()
return "some default data"</span>
这样代码量就小了很多,可读性也强了.
2、
os.chdir(path) 进入某个路径下,
os.remove(path) 删除某个path
os.getcwd() 得到当前路径
.......
3、sys.exit()退出程序
4、有时候我们需要捕捉键盘的ctrl+c,有两种思路.
1、一种是利用异常,KeyboardError.
2、利用signal模块的信号量.
5、我们的文件对象已经是实现了上下文协议的,也就是:
<span style="font-size:18px;">with open("eggs", "w+") as eggs:
....</span>
这样有一个好处,就是不用管文件有没有关闭,就算在with下面出现了异常,那么在退出with上下文的时候, 会自动的帮你清理资源, 比如在这里是关闭文件.
要实现上下文协议, 就要重写 __exit__()和__enter__方法, 换一句话就是实现了这两个方法的对象,就能够用在with的上下文环境中了.