Pytho with上下文管理

我们前面说在用open功能打开文件,完成读写之后,一定要回收操作系统资源,但肯定还是会有人读写文件完了之后就忘记了回收操作系统资源。

针对初学者,python也给我们提供了这种傻瓜式的操作文件的方式。用这种方式发开文件,你就不用再写那个f.close()了。

它会自动帮你去回收操作系统资源,这就是我们的with语法。也称之为上下文管理器。

with open('date/a.txt', mode='rt', encoding='utf-8') 

这里的open功能就会得到一个文件对象,然后赋值给变量f,但是用了with语法之后,就不能在最后写等号,要写as f,然后冒号。

with open('date/a.txt', mode='rt', encoding='utf-8') as f:

当然,你们可以换成其他的变量名,a、b、c、d都行。

这个open功能的返回值是一个文件对象,简单说就是用帮助我们操作文件的,我们可以通过这个文件对象,来向操作系统发起读或者写文件的请求。

还有人把这个文件对象称之为文件句柄。其实本质都是一样的。

换个名字可能让一些普通人觉得高大上一点,句柄你可能没听过,但你肯定听过游戏手柄。

游戏手柄是用来控制游戏的,而文件句柄你就可以理解为文件手柄。其实也是用来控制文件的。

我们在冒号后面直接敲回车,pycharm就会帮我们自动缩进4个空格。

现在我们又要学习一种有子代码块的语法了,和前面我们学过的if判断、for循环、while循环一样。

你会发现这些语法都有一个规律,就是子代码块的上一行的最后都会有一个冒号,包括我们后面要学的函数、类都是这样。

函数和类后面都会陆续讲到。

接着在这个子代码块里面,我们就可以进行文件的读写操作了。

with open('date/a.txt', mode='rt', encoding='utf-8') as f:
    res = f.read()

这个f.read()会读取硬盘里的数据,然后通过我们指定的这个utf-8的编码,转成unicode,也就是转成了python3里面的字符串,赋值给了res。

然后打印一下res。

with open('date/a.txt', mode='rt', encoding='utf-8') as f:
    res = f.read()
    print(res)

前面我们没有with语法的时候,到这里还没有完,还需要做一步f.close来回收操作系统资源。

但是用了with语法之后,就不再需要来做这一步了,会主动帮我们调用f.close。

with语法还有一个用法,就是可以同时打开多个文件。我再新建一个b.txt文件,然后我再用with语法同时打开两个txt文件。

with open('date/a.txt', mode='rt', encoding='utf-8') as f\
    ,open('date/b.txt', mode='rt', encoding='utf-8') as f2:
    res = f.read()
    print(res)
    res2 = f2.read()
    print(res2)

未经允许不得转载:445IT之家 » Pytho with上下文管理

赞 (0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏