经过上几章的学习,完成如下任务:读取一个文本文件里的内容,将每一行的内容按“:”分割成两部分,根据分割出第一项判断并分别放入两个列表里,去除首尾空白,在屏幕上打印。

# 两个列表用于存储数据
man=[]
other=[]
try:
data=open("demo.txt", encoding="utf-8")  #文件里的内容类似“man:hello。\n woman:hello.\n man:how are you. \n woman:yes.”如果有中文别忘了编码这个大坑
for each_line in data:  #循环读取
try:
(role, line_spoken)=each_line.split(":", 1)  #分割出的内容存放在元组里,元组是不可变的
line_spoken=line_spoken.strip()         #去除首尾空白(跟c#不一样啊)
if role=="man":
man.append(line_spoken)            #在末尾添加内容
else:
other.append(line_spoken)
except ValueError:
pass
except IOError:
print("IOError")
finally:  #这一段的代码是即使上面发生了异常也会执行
  data.close()
print(man)
print(other)

这算是复习前面的内容,根据前面的学习,你能做出来吗(我除了strip去空白外都完成了,其实很多语言大体是相通的,所以有一门语言的基础,学习那一系的语言都不会太难(c#和python都算是c系的吧))

接下来介绍以写入模式打开文件,上一篇文章已经介绍了open的参数传入“w”就可以写入文件。然后是print,既可以向屏幕输出文本,也可以向文件写入文本,只要传入参数file=out即可以把字符串传入文本

下面我们来实验一下吧:

# 还记得吗w是如果文件存在就会清除原有内容,所以用+表示更新文本而不清除原有内容
out=open("demo.txt", "w+")
print("write something in file", file=out)
out.close()
# 关闭非常重要,一定要关闭文件以确保数据被保存至文件。

那么我们继续,想上面的生成的两个列表分别保存值两个文件里

    manout=open("manout.txt", "w")
for line in man:
print(line, file=manout)
otherout=open("otherout.txt", "w")
for line in other:
print(line, file=otherout)
manout.close()
otherout.close()

将这一段加入到上面的代码的最后。执行后创建了两个新文件并写入了读取来的内容。注意把关闭文件的代码放到finally里面去。

那么问题来了:学挖掘机哦不,是关闭文件每次都要写,挺麻烦的也没有其他方法呢,c#里有using可以释放资源,python里也有:with

with open("manout.txt", "w") as manout:
for line in man:
print(line, file=manout)
with open("otherout.txt", "w") as otherout:
for line in other:
print(line, file=otherout)

这一段代码等价于上一段,而不需要你在写额外的关闭代码。那么,你能把最上面的那一段读取的代码也改掉吗?

腌制数据

听起来有点怪,我查了一下词典,pickle还真是腌制的意思。

python里有一个库叫pickle,可以用于保存和加载然后python数据对象,比如列表。

pickle是以二进制方式保存的,所以保存的文件就不能打开查看了。他提供了两个函数:dump()和load()用于保存和恢复数据。让我们改写上面的代码

# 使用前要导入pickle库
import pickle
  #pickle要求以二进制方式打开文件
with open("manout.txt", "wb") as manout:
pickle.dump(man, manout)
with open("otherout.txt", "wb") as otherout:
pickle.dump(other, otherout)
  #加载数据
  with open("manout.txt", "rb", encoding="utf-8") as manread:
    data = pickle.load(manread)

现在你已经把数据保存到“数据库”里了,那么第四章持久存储就介绍到这里

1.用strip去除空白

2.给open函数出入“w”写入文件

3.使用with自动关闭文件

4.使用pickle库的dump()和load()保存和恢复数据

你看,其实python也不难嘛。

Head First Python学习笔记3——持久存储的更多相关文章

  1. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

  2. Python学习笔记(十四)

    Python学习笔记(十四): Json and Pickle模块 shelve模块 1. Json and Pickle模块 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不 ...

  3. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

  4. Python学习笔记(六)

    Python学习笔记(六) Ubuntu重置root密码 Ubuntu 16.4 目录结构 Ubuntu 命令讲解 1. Ubuntu重置root密码 启动系统,显示GRUB选择菜单(如果默认系统启动 ...

  5. Python学习笔记,day5

    Python学习笔记,day5 一.time & datetime模块 import本质为将要导入的模块,先解释一遍 #_*_coding:utf-8_*_ __author__ = 'Ale ...

  6. Deep learning with Python 学习笔记(1)

    深度学习基础 Python 的 Keras 库来学习手写数字分类,将手写数字的灰度图像(28 像素 ×28 像素)划分到 10 个类别 中(0~9) 神经网络的核心组件是层(layer),它是一种数据 ...

  7. 雨痕 的《Python学习笔记》--附脑图(转)

    原文:http://www.pythoner.com/148.html 近日,在某微博上看到有人推荐了 雨痕 的<Python学习笔记>,从github上下载下来看了下,确实很不错. 注意 ...

  8. Python学习笔记_Python对象

    Python学习笔记_Python对象 Python对象 标准类型 其它内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比較 对象身份比較 布尔类型 ...

  9. Python学习笔记之文件处理

    1.打开和关闭 要打开文件可以使用函数 open(),它位于自动导入模块 io 中.函数将文件名作为唯一不可缺少的函数,并返回一个文件对象.它还有一个名叫 mode 的参数,用于指定文件模式,其可取值 ...

随机推荐

  1. C# winform程序实现开机自启动,并且识别是开机启动还是双击启动

    开机启动程序,在很多场合都会用到,尤其是那种在后台运行的程序. 效果图: 以上两幅图都用到了命令行启动程序,为了模拟开机启动或者其他程序调用此程序. 第一幅图:程序启动可以根据不同参数,执行不同的操作 ...

  2. docker 多阶段构建

    构建镜像最具挑战性的一点是使镜像大小尽可能的小.Dockerfile中的每条指令都为图像添加了一个图层,您需要记住在移动到下一层之前清理任何不需要的工件.对于多阶段构建,您可以在Dockerfile中 ...

  3. ABP框架踩坑记录

    ABP框架踩坑记录 ASP.NET Boilerplate是一个专用于现代Web应用程序的通用应用程序框架. 它使用了你已经熟悉的工具,并根据它们实现最佳实践. 文章目录 使用MySQL 配置User ...

  4. Weekly Contest 129

    1020. Partition Array Into Three Parts With Equal Sum Given an array A of integers, return true if a ...

  5. postgresql子查询优化(提升子查询)

    问题背景 在开发项目过程中,客户要求使用gbase8s数据库(基于informix),简单的分页页面响应很慢.排查发现分页sql是先查询出数据在外面套一层后再取多少条,如果去掉嵌套的一层,直接获取则很 ...

  6. 全屏背景图的实现及background的相关属性

    今天需要做一个占满设备宽度的轮播图,这里作为demo仅展示一张图,下面分别是要操作的图片(这里做了缩放处理,实际的图比较大),以及要实现的效果图,很明显两者是不成比例的:      (图一)     ...

  7. 【LOJ 2542】【PKUWC2018】 随机游走(最值反演 + 树上期望dp)

    哇我太菜啦555555 不妨钦定我们需要访问的点集为$S$,在$S$已知的情况下,我们令$f(x) $表示从$x$走到点集$S$中任意一点的期望步数. 若$x∈S$,则显然$f(x)=0$,否则$f[ ...

  8. 【loj6437】 【PKUSC2018】 PKUSC 计算几何

    题目大意:给你一个m个点的简单多边形.对于每个点i∈[1,n],作一个以O点为原点且过点i的圆,求该圆在多边形内的圆弧长度/圆长. 其中n≤200,m≤500. 我们将n个点分开处理. 首先,我们要判 ...

  9. Hive导出表数据

    法一: hive (stuchoosecourse) > insert overwrite local directory '/home/landen/文档/exportDir'         ...

  10. Linux vim 编辑命令

    vi命令命令模式:yy:复制 光标所在的这一行 4yy:复制 光标所在行开始向下的4行p: 粘贴dd:剪切 光标所在的这一行2dd:剪切 光标所在行 向下 2行D:从当前的光标开始剪切,一直到行末d0 ...