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. js判断是否为电话号码

    /* 用途:检查输入字符串是否符合国内固话或者传真格式 输入: s:字符串  格式例如:030-4557777返回: 如果通过验证返回true,否则返回false */ function isTel( ...

  2. window.location.href用法与a标签的比较

    1.在使用这两种方法进行页面的跳转时,这两种方法都能够有效的实现该功能 但是其原理不尽相同 第一:window.location.href()方法必须书写在js中 <html> <h ...

  3. 异步任务-springboot

    异步任务-springboot 异步:异步与同步相对,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作.也就是说无论异步方法执行代码需要多长时间,跟主线程没有任何影响,主线程 ...

  4. VMware及win10虚拟机的安装及环境配置

    一.安装VMware 1.1.下载VMware安装包 在此给大家一个迅雷的链接:点击下载 提取码:sp84 1.2.点击下一步 1.3.点击我接受,点击下一步 1.4.更换安装位置,点击下一步 1.5 ...

  5. 学习打卡——docker部署

    1. 部署mysql 拉取对应版本的mysql,不加版本号默认当前最新版 docker pull mysql:8.0.26 创建目录,可以换成你自己想把它存放的目录,后续同理 mkdir ~/mysq ...

  6. Mybatis项目无法初始化异常

    该异常是Maven资源导出时出错,.xml文件或者.properties文件不能正常导出所致,最简单的办法就是在目标文件上复制粘贴一份.xml文件或者是.properties文件: 但是实际应用的过程 ...

  7. python基础练习题(题目 斐波那契数列II)

    day16 --------------------------------------------------------------- 实例024:斐波那契数列II 题目 有一分数序列:2/1,3 ...

  8. 【FAQ】接入HMS Core地图服务过程中常见问题总结

    HMS Core地图服务(Map Kit)给开发者提供一套地图开发调用的SDK,助力全球开发者实现个性化地图呈现与交互,方便轻松地在应用中集成地图相关的功能,全方位提升用户体验. 在日常工作中,我们会 ...

  9. [STL] set 集合

    可以用 if ( a.find(x) == a.end() ) 判断 x 在 a 中是否存在

  10. Abp集成HangFire

    简要说明 后台作业在系统开发的过程当中,是比较常用的功能.因为总是有一些长耗时的任务,而这些任务我们不是立即响应的,例如 Excel 文档导入.批量发送短信通知等. ABP vNext 提供了后台作业 ...