with
with操作写法简单又安全
文件操作使用with会自动调用关闭文件操作,即使出现异常也会自动调用文件关闭操作
上下文管理器
with语句强大的根本是由上下文管理器支持的
通过open打开的的文件,赋值给的一个变量file,file就是文件对象,就是一个上下文管理器
with open('1.txt', 'r') as f:print(f.read())
打开多个文件时用逗号隔开
with open('1.txt', 'r') as f1, open('2.txt', 'r') as f2:print(f1.read())print(f2.read())
如何实现上下文管理器的?
一个类只要实现了__enter__()和__exit__()就是了,通过该类创建的对象就称之为上下文管理器
- __enter__():表示上文方法,返回一个操作的文件对象
- __exit__():表示下文方法,with语句执行完后自动执行,即使出现异常也会执行
class File(object):def __init__(self, file_name, file_model):self.file_name = file_nameself.file_model = file_modeldef __enter__(self):print('上文')self.file = open(self.file_name, self.file_model)return self.filedef __exit__(self, exc_type, exc_val, exc_tb): # 后面参数默认提供的,不用管print('下文')self.file.close()wenjian = File('1.txt', 'r')
with wenjian as f:print(f.read())# 和以上是一样的
with File('1.txt', 'r') as f:print(f.read())
需要传入两个参数,第一个你要打开的文件的文件名,第二个参数是你要以什么方式去打开,就是r,w,a,之类的