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 ...
随机推荐
- HTML 和 form 表单常用标签
HTML和CSS 常用标签: p:段落,自动换行 span:和div类似,但是默认不换行 br:换行 hr:分割线 h1-h6:标题标签 a:超链接 瞄点:通过给a链接设置#XX作为链接,给需要链接的 ...
- Java核心知识1:泛型机制详解
1 理解泛型的本质 JDK 1.5开始引入Java泛型(generics)这个特性,该特性提供了编译时类型安全检测机制,允许程序员在编译时检测到非法的类型. 泛型的本质是参数化类型,即给类型指定一个参 ...
- 安卓记账本开发学习day6之进度
完成了基本的收入与支出添加,支持输入备注 以及备注的输入和金额的遮挡显示切换
- 动手动脑3&课堂作业(四则运算与继承)
先上结果 Java程序会先把所有的静态模块提取出来优先执行 四则运算主程序代码 1 import java.util.Scanner; 2 3 4 public class main { 5 publ ...
- this的指向问题及改变this指向
概念: this是运行环境下的一个系统变量, 由于this在不同的执行环境下有不同的值, 所以在使用this时,多加注意 (使用this之前,先打印) 1,在全局作用域下,this默认指向window ...
- SSM整合_年轻人的第一个增删改查_查找
写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...
- 2021.08.16 P1078 文化之旅(最短路)
2021.08.16 P1078 文化之旅(最短路) 题意: n个地,k个信仰,每个地都有自己的信仰,信仰之间会相互排斥,同信仰之间也会相互排斥,有m条路,问从s到t的最短距离是多少? 有一位使者要游 ...
- python基础练习题(题目 取一个整数a从右端开始的4〜7位。)
day36 --------------------------------------------------------------- 实例054:位取反.位移动 题目 取一个整数a从右端开始的4 ...
- git-config配置多用户环境以及 includeIf用法
git-config配置多用户环境以及 includeIf用法 git-config配置多用户环境以及 includeIf用法 背景 介绍 配置 栗子 背景 开发人员经常遇到这样的问题,公司仓库和个人 ...
- Ubuntu环境Docker+K8s+Dashboard的安装配置(无坑亲测)
安装之前的准备: 安装docker 使用国内 daocloud 一键安装命令: curl -sSL https://get.daocloud.io/docker | sh 直接从dockerhub下载 ...