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语句和上下文管理器的更多相关文章

  1. with和上下文管理器

    with和上下文管理器 如果你有时间阅读源码的习惯,可能会看到一些优秀的代码会出现带有with关键字的语句. 对于系统资源如文件,数据库连接,socket而言,应用程序打开这些资源并执行完业务逻辑之后 ...

  2. django-10-中间件和上下文管理器

    <<<中间件的引入>>> 用户<->中间件<->url->视图  在app目录里面 middleware.py  (1)中间件就是一个 ...

  3. 文件操作-with和上下文管理器

    代码: # -*- coding:utf-8 -*- # 普通版 如果写入的过程中出错 则不会释放资源 def m1(): f = open("test.txt","w& ...

  4. 【Python学习笔记】with语句与上下文管理器

    with语句 上下文管理器 contextlib模块 参考引用 with语句 with语句时在Python2.6中出现的新语句.在Python2.6以前,要正确的处理涉及到异常的资源管理时,需要使用t ...

  5. Python之上下文管理器

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #Python之上下文管理器 #http://python.jobbole.com/82620/ #语法形式: ...

  6. python with和上下文管理工具

    对于系统资源如文件.数据库连接.socket 而言,应用程序打开这些资源并执行完业务逻辑之后,必须做的一件事就是要关闭(断开)该资源. 比如 Python 程序打开一个文件,往文件中写内容,写完之后, ...

  7. python之with语句结合上下文管理器

    所谓上下文管理器即在一个类中重写了__enter__方法和__exit__方法的类就可以成为上下文管理器类. 我们可以通过with语句结合上下文管理器简化一些操作. 使用with语句结合自定义上下文管 ...

  8. python2.7高级编程 笔记一(Python中的with语句与上下文管理器学习总结)

    0.关于上下文管理器上下文管理器是可以在with语句中使用,拥有__enter__和__exit__方法的对象. with manager as var: do_something(var) 相当于以 ...

  9. python基础之上下文管理器

    前言 关于计算器运行的上下文的概念,我的理解也不是很深:按我的理解就是程序在运行之前,其所需要的资源,运行环境等都会被序列化,然后加入到CPU的任务队列中,等待调度系统分配时间片执行.下面谈谈pyth ...

随机推荐

  1. springAop必导jar包

    SpringAop:的底层就是通过JDK动态代理"或"CGLib动态代理为技术目标织入横切逻辑. 做aop:需要导入: spring-aop-4.1.5.RELEASE.jar s ...

  2. JS中Map和ForEach的区别

    定义 forEach()方法: 针对每一个元素执行提供的函数. map()方法: 创建一个新的数组,其中每一个元素由调用数组中的每一个元素执行提供的函数得来. 区别 forEach()方法不会返回执行 ...

  3. MVVM模式-数据的双向绑定

  4. JavaSE常用类之Object类

    1. hashCode方法 代码: package NeiBuLei; public class hashCode { public static void main(String[] args) { ...

  5. Mybatis-typeAliases的作用

    其他具体代码请访问->mybatis的快速入门 1.在mybatis核心配置文件SqlMapperConfig.xml中配置别名 <!-- 定义别名--> <typeAlias ...

  6. 简易table form梳理

    <!--      A:表格-table    <双标签,day3上午第一次接触>         作用:显示信息     一:table简易案例:         <tabl ...

  7. Codeforces Round #700 (Div. 2) --- B(思维)

    传送门 有必要提醒自己一下, 先把题读利索了(手动捂脸) 题目 B. The Great Hero   The great hero guards the country where Homer li ...

  8. Fastjson JdbcRowSetImpl利用链学习

    JdbcRowSetImpl 接着继续学习fastjson的第二条链JdbcRowSetImpl,主要是利用jndi注入达到的攻击,而且没有什么利用限制,而且其原理就是setter的自动调用,具体se ...

  9. 3.3 常用Linux命令

    1.pwd命令 pwd命令用于显示用户当前所处的工作目录 2.cd命令 cd命令用于切换当前的工作路径,英文全称为"change directory",语法格式为"cd ...

  10. vue2响应式原理与vue3响应式原理对比

    VUE2.0 核心 对象:通过Object.defineProtytype()对对象的已有属性值的读取和修改进行劫持 数组:通过重写数组更新数组一系列更新元素的方法来实现元素的修改的劫持 Object ...