Python with语句和上下文管理器
open("FishC.txt","w")#此处需注意如果被打开的文件中,已有内容,那么用w的方式打开,则会导致原文件内容被截断,也就是相当于被清空了,然后重新写入的意思。然后我们把打开后产生的文件对象赋值给 f 变量。
然后我们调用文件对象 f 的write方法来写入一个字符串。其返回的是写入的字符个数。最后要记得把打开的文件对象关闭;这样你写入的内容才能真的写入进去,才能真正的保存下来。如下图所示。

总结起来就是3步:打开文件,操作文件,关闭文件。
如果我们使用with上下文管理器方案的实现如下:
with open("FishC.txt","w") as f:
f.write("Li Jin-Tao,the President !")
用with实现文件操作,你就不需要额外地写f.close()来关闭文件了。用了with其内含了这个操作。
对于文件操作这样的3步来说 ,上文就是打开文件,下文就是关闭文件,这就是上下文管理器做的事情,使用了上下文管理器,我们就不需要手动的关闭文件,文件处理的代码只需要放到with语句的缩进里面就可以了。
另外,千万不要以为with语句是个花瓶,使用上下文管理器最大的优势是能够确保资源的释放。在这里就是文件的正常关闭。with会帮你关闭 。
在函数主体内的代码块出现问题时,比如1/0这样的问题,如果你使用普通的f.close(),那么你想写入文件的内容,在报错的同时,不会真的写到文件中去。而如果你使用with语句,则在报错的同时,内容会写入到文件中去。
pickle:泡菜,Python对象序列化的第一个。其解决的是一个永久存储Python对象的问题;它允许你将字符串、列表、字典等这些Python对象,给保存为文件的形式。有人就问.py文件不就是保存为文件的形式了吗?不对,.py文件是打包的源代码,是可以被执行的独立单元;而这个pickle则是在模块时很有用处。此处讲的是将Python对象序列化的操作。序列化也就是将Python对象转换为2进制字节流的过程;也即将人能看得懂的源代码转换成0110这样的二进制组合。要注意两个函数:dump和load。
可看到下图中的变量既有整型变量,也有列表、字符串和字典;这些都是Python的对象。
想要使用pickle就要先导入它,import pickle
要保存为pickle文件,那么后缀必须为pkl,名字随便取,且打开时必须用2进制的形式打开,此处用2进制可写入的形式打开。
然后再函数体中用pickle.dump(x,f)的形式,把x写入f中去。如下图所示:

然后,你可看到已经生成了data.pkl文件,用sublime、notepad++、editplus等软件打开可看到里面都是二进制文件。如下图所示:

如果你用文本文件打开这个文件的话,那么你看到的是一堆乱码。
那么我们下面编写一个read.py的Python文件,来读取这个二进制代码,如下所示,修改下上面的write.py文件即可实现;需要用到pickle.load()函数,并传入要读取的文件。如下图所示,之前我们以什么顺序存进去的,现在就是以什么顺序读出来。
其中,下图中 x=pickle.load(f)的变量名x,你根据需要可以随便取名。读出的对象类型就是我们存进去的对象类型 。

然后可以看到原来写入的内容就读取出来了,如下图所示。

你可能觉得写了那么多的dump或load太麻烦了;其实你可以这么做,用元组的方式把它们给打包起来。
这样你要在写入和读取时都要用对应的方法即可。如下两个图所示,分别为写入和读取时都用同样的方式。

可看到得到的结果是一样的。

Python with语句和上下文管理器的更多相关文章
- with和上下文管理器
with和上下文管理器 如果你有时间阅读源码的习惯,可能会看到一些优秀的代码会出现带有with关键字的语句. 对于系统资源如文件,数据库连接,socket而言,应用程序打开这些资源并执行完业务逻辑之后 ...
- django-10-中间件和上下文管理器
<<<中间件的引入>>> 用户<->中间件<->url->视图 在app目录里面 middleware.py (1)中间件就是一个 ...
- 文件操作-with和上下文管理器
代码: # -*- coding:utf-8 -*- # 普通版 如果写入的过程中出错 则不会释放资源 def m1(): f = open("test.txt","w& ...
- 【Python学习笔记】with语句与上下文管理器
with语句 上下文管理器 contextlib模块 参考引用 with语句 with语句时在Python2.6中出现的新语句.在Python2.6以前,要正确的处理涉及到异常的资源管理时,需要使用t ...
- Python之上下文管理器
# -*- coding: utf-8 -*- #python 27 #xiaodeng #Python之上下文管理器 #http://python.jobbole.com/82620/ #语法形式: ...
- python with和上下文管理工具
对于系统资源如文件.数据库连接.socket 而言,应用程序打开这些资源并执行完业务逻辑之后,必须做的一件事就是要关闭(断开)该资源. 比如 Python 程序打开一个文件,往文件中写内容,写完之后, ...
- python之with语句结合上下文管理器
所谓上下文管理器即在一个类中重写了__enter__方法和__exit__方法的类就可以成为上下文管理器类. 我们可以通过with语句结合上下文管理器简化一些操作. 使用with语句结合自定义上下文管 ...
- python2.7高级编程 笔记一(Python中的with语句与上下文管理器学习总结)
0.关于上下文管理器上下文管理器是可以在with语句中使用,拥有__enter__和__exit__方法的对象. with manager as var: do_something(var) 相当于以 ...
- python基础之上下文管理器
前言 关于计算器运行的上下文的概念,我的理解也不是很深:按我的理解就是程序在运行之前,其所需要的资源,运行环境等都会被序列化,然后加入到CPU的任务队列中,等待调度系统分配时间片执行.下面谈谈pyth ...
随机推荐
- Promise原理实现(一):前置知识点
实现promise首先需要了解如下知识点: 1: 高阶函数 (一个函数作为另外一个函数的参数,这个包含的函数就是高阶函数): outer是一个高阶函数,inner函数作为一个参数传递:此处也是闭包 ...
- (ICONIP2021)On the Unreasonable Effectiveness of Centroids in Image
目录 摘要 1.引言 2.提出的方法 2.1 CentroidTripletloss 2.2 聚合表示 3.实验 3.1 数据集 3.2 应用细节 3.3 Fashion检索结果 3.4 行人再识别结 ...
- 变量 数据类型 条件if语句
python是解释型 弱类型编程语言; "优雅", "明确", "简单"; 开发效率非常高; 可移植性; 可扩展性; 可嵌入型. ...
- Oracle数据库包括两个部分数据库和数据库实例
olsnodes,这个命令用来显示集群点列表(grid即oracle rac的第三个安装包内的软件,可找到) //集群名称[grid@shdb02 ~]$ olsnodes -cshfpdb-clus ...
- mongodb replication
官方文档:https://docs.mongodb.com/manual/replication/ 启动参数: 通过linux的包管理器(例如:yum)安装的mongodb会产生一个默认的配置文件:/ ...
- Java学习day3
今天跟着b站up的视频学习了方法定义调用与重载,以及类的封装. Java中的方法与c++当中的函数类似,只是定义格式为: public static void 方法名(){ 方法体 } 上完课做实验的 ...
- 【HarmonyOS学习笔记】记第一次使用IDE
哈喽大家好我是脸皮贼厚的小威 愚人节刚过先给大家拜个早年吧 最近在HarmonyOS官网下载了IDE,并抱着学(wan)习(wan)的心态试着跑出了Hello World,并安装到手机上 这是一个简单 ...
- 接口测试框架实战(一) | Requests 与接口请求构造
1080×388 33.4 KB Requests 是一个优雅而简单的 Python HTTP 库,其实 Python 内置了用于访问网络的资源模块,比如urllib,但是它远不如 Requests ...
- GO语言学习——切片一
切片(slice) 数组的长度的固定的.是声明之后不能变的.是类型的一部分 切片是一个引用类型 切片的定义 声明切片类型的基本语法如下: var name []T 其中, name:表示变量名 T:表 ...
- 【Java分享客栈】一文搞定京东零售开源的AsyncTool,彻底解决异步编排问题。
一.前言 本章主要是承接上一篇讲CompletableFuture的文章,想了解的可以先去看看案例: https://juejin.cn/post/7091132240574283813 Comple ...