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. 利用window对象自带atob和btoa方法进行base64的编码和解码

    项目中一般需要将表单中的数据进行编码之后再进行传输到服务器,这个时候就需要base64编码 现在可以使用window自带的方法window.atob() 和  window.btoa()  方法进行 ...

  2. Java中有关clone方法的用法

    一.clone在数组基本数据类型中的使用 public class Main { public static void main(String[] args) { int[] arr= {7,8,9} ...

  3. 启动分区查找可以通过 fdisk -l命令

    这里有两个硬盘,一个硬盘有两个分区,sda1 的boot列 带*表示是启动分区,否则为空

  4. Python操作数据库类 Oracle、Sqlserver、PostgreSQL

    我在工作中经常使用Python,特点很明显,轻量,效率还不错,尤其在维护或者自动化方面. 下面是我使用到的访问数据库(Oracle.Sqlserver.PostgreSQL)的公共类. 一.Oracl ...

  5. Problem N: 输出回字形

    这个题如果用for循环直接做的话恐怕得做上几个小时吧,加上一点小技巧,用坐标法来写这个题.就像下面这样: 坐标原点不在矩形的角上,而在矩形的中心处,这只是算是一个技巧,理解起来好理解而已.

  6. Kotlin 之 let、with、run、apply、also 函数的使用

    一.内联拓展函数 let let 扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,let函数的是一个不错的选择:let函数另一个作用就是可以避免写一些判断null的操 ...

  7. A标签上使用onclick事件,js函数响应成功,单会刷新当前页面陷阱

    BEGIN; 最近在做html页面时,有时候会遇到以前没遇到的各种奇葩问题. 目前要记载的,就是其中之一. 我们在写链接的时候,即A标签,最普通的写法无非是 <a href='http://ww ...

  8. 合并csv文件保存到一个csv文件中-保留表头

    主要实现功能: 在同一文件夹下的所有csv文件全部合并到同一个csv文件中,并将csv文件的表头保留 1 import os 2 import pandas as pd 3 path = os.get ...

  9. Java创建boolean型数组

    Java如何声明并初始化一个boolean型的数组? public class Main{ static boolean[] arr1 = new boolean[20]; public static ...

  10. 创建第一个c程序

    创建,组织,生成 ,生成. 1.我们先创建一个win32项目. 文件->新建->项目->Visual C++ ->Win32   输入项目名称   选择项目保存位置 很重要的一 ...