371-with上下文管理器

写在前面

老的文件操作方法:

# 写入模式打开文件
f = open("1.txt", "w")
# 写入文件内容
f.write("Ikun")
# 关闭文件
f.close()

文件在使用完后必须关闭,因为文件对象会占用操作系统资源,并且操作系统同一时间能打开的文件数量也是有限的(linux内核信息定义的最大打开文件数是1024)

老方法存在的问题:

#1、以读的方式打开文件
f = open("1.txt", "r")  # 只读模式
#2、写入文件内容
f.write("Ikun")  # 但是写入文件
#3、关闭文件
f.close()

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用,这里就会造成资源浪费(会占用系统资源)

对此问题,可以用try...except...语句来解决

但是最好的方案是使用with语句(高级语法,代码简化)

with语句和上下文管理器

上下文管理器和with语句的定义

Python提供了 with 语句的写法,既简单又安全。

文件操作的时候使用with语句可以自动调用关闭文件操作,即使出现异常也会自动关闭文件操作。

使用with方法实现文件操作,如下所示:

# 1、以写的方式打开文件
with open('1.txt', 'w') as f:
    # 2、读取文件内容
    f.write('Ikun')

上下文管理器

当使用with语句后,就会自动创建上文管理器(__enter()__)和下文管理器(__exit()__)

__enter()__f = open("1.txt", "w")
__exit()__f.close()