Head First Python学习笔记3——持久存储
经过上几章的学习,完成如下任务:读取一个文本文件里的内容,将每一行的内容按“:”分割成两部分,根据分割出第一项判断并分别放入两个列表里,去除首尾空白,在屏幕上打印。
# 两个列表用于存储数据
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——持久存储的更多相关文章
- OpenCV之Python学习笔记
OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...
- Python学习笔记(十四)
Python学习笔记(十四): Json and Pickle模块 shelve模块 1. Json and Pickle模块 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不 ...
- Python学习笔记(十一)
Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...
- Python学习笔记(六)
Python学习笔记(六) Ubuntu重置root密码 Ubuntu 16.4 目录结构 Ubuntu 命令讲解 1. Ubuntu重置root密码 启动系统,显示GRUB选择菜单(如果默认系统启动 ...
- Python学习笔记,day5
Python学习笔记,day5 一.time & datetime模块 import本质为将要导入的模块,先解释一遍 #_*_coding:utf-8_*_ __author__ = 'Ale ...
- Deep learning with Python 学习笔记(1)
深度学习基础 Python 的 Keras 库来学习手写数字分类,将手写数字的灰度图像(28 像素 ×28 像素)划分到 10 个类别 中(0~9) 神经网络的核心组件是层(layer),它是一种数据 ...
- 雨痕 的《Python学习笔记》--附脑图(转)
原文:http://www.pythoner.com/148.html 近日,在某微博上看到有人推荐了 雨痕 的<Python学习笔记>,从github上下载下来看了下,确实很不错. 注意 ...
- Python学习笔记_Python对象
Python学习笔记_Python对象 Python对象 标准类型 其它内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比較 对象身份比較 布尔类型 ...
- Python学习笔记之文件处理
1.打开和关闭 要打开文件可以使用函数 open(),它位于自动导入模块 io 中.函数将文件名作为唯一不可缺少的函数,并返回一个文件对象.它还有一个名叫 mode 的参数,用于指定文件模式,其可取值 ...
随机推荐
- 在Docker中运行纸壳CMS并配置使用MySql
纸壳CMS是基于ASP.Net Core开发的可视化内容管理系统,可以跨平台部署,可以在容器中运行.接下来看看如何在docker中运行纸壳CMS. GitHub:https://github.com/ ...
- Kafka consumer的参数
earliest: 当各分区下有已提交的offset时,从提交的offset开始消费:无提交的offset时,从头开始消费 latest :当各分区下有已提交的offset时,从提交的offset开始 ...
- 理解DDoS防护本质:基于资源较量和规则过滤的智能化系统
本文由 网易云发布. 随着互联网生态逐渐形成,DDoS防护已经成为互联网企业的刚需要求,网易云安全(易盾)工程师根据DDoS的方方面面,全面总结DDoS的攻防对抗. 1.什么是DDoS DDoS全称 ...
- H - The LCIS on the Tree HDU - 4718
The LCIS on the Tree Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Oth ...
- django 模型对象的 update() get_or_create() 的使用
update() 如果一个查询集是一个列表对象, 需要更新该列表对象里所有的单个数据集的数据,可以使用update()方法,而不须遍历整个查询集对象一个个逐一进行修改 obj_list = UserI ...
- FunDA(11)- 数据库操作的并行运算:Parallel data processing
FunDA最重要的设计目标之一就是能够实现数据库操作的并行运算.我们先重温一下fs2是如何实现并行运算的.我们用interleave.merge.either这几种方式来同时处理两个Stream里的元 ...
- BitMap算法详解
所谓的BitMap就是用一个bit位来标记某个元素所对应的value,而key即是该元素,由于BitMap使用了bit位来存储数据,因此可以大大节省存储空间. 基本思想: 这此我用一个简单的例子来详细 ...
- 二:maven构建module
通常情况下,我们一个项目是需要分多个模块的,这是我们用maven管理项目就需要构建一个多模块的项目: 通常的结构是一个模块中有一个主项目,下面包含多个子项目,如果是web项目则子项目中有一个是java ...
- RSA的JAVA实现 及javax.crypto.IllegalBlockSizeException
一.背景 最近工作中涉及到RSA加密的相关需求任务,之前对加密算法了解不多,开发过程中遇到了一些坑记录一下. 二.RSA原理 RSA加密是非对称加密,公开私钥,保留私钥.通信时数据通过公开的公钥加密, ...
- maven添加仓库没有的jar包
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging= ...