python文件操作
with关键字的使用
with:我们称之为上下文管理器,很多需要手动关闭的连接比如文件连接、socket连接、数据库连接等都能使用with关键字自动关闭连接。
with open(‘aaa.txt‘,‘r‘,encoding=‘utf8‘) as file: file.read() #不需要手动关闭文件,with关键字会帮助我们关闭文件
对于系统资源如文件、数据库连接、socket而言,应用程序打开这些资源并执行完业务逻辑之后,必须做的一件事就是要关闭(断开)该资源。
同样,对于数据库,如果连接数过多而没有及时关闭的话,就可能会出现“Can not connect to MySQ server Too many connections”,因为数据库连接是一种非常昂贵的资源,不可能无限制的被创建。
1、普通版
def m1(): f=open("output.txt","w") f.writer("我学Python") f.close()
这样写有一个潜在的问题,如果在调用write的过程中,出现了异常进而导致后续代码无法继续执行,close方法无法被正常调用,因此资源就会一直被该程序占用着。那么该如何改进代码呢?
2、进阶版
def m2(): f=open("output.txt","w") try: f.writer("我学python") except IOWrror: print("oops error") finally: f.close()
改良版本的程序是对可能发生异常的代码进行try捕获,使用try/finally语句,该语句表示如果在try代码块中程序出现了异常,后续代码就不在执行,而直接跳转到except代码块。而无论如何,finally块的代码最终都会被执行。因此,只要把close放在finally代码中,文件就一定会关闭。
3、高级版
def m3(): with open("output.txt","w") as f: f.write("我学python")
一种更加简洁、优雅的方式就是使用with关键字。open方法的返回值赋值给变量f,当离开with代码块的时候,系统会自动调用f.close()方法,with的作用和使用try/finally语句是一样的。
上下文管理器
class Demo: def __enter__(self): print(‘python‘) def __exit__(self, exc_type, exc_val, exc_tb): print(‘world‘) with Demo() as d: print(‘hello‘) 运行结果: python hello world
原文:https://www.cnblogs.com/shixiaoxun/p/14498280.html