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也不难嘛。

时间: 2024-12-26 00:48:17

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

OpenCV之Python学习笔记

OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书<OpenCV Computer Vision with Python>,于是就看一遍,顺便把自己掌握的东西整合一下,写成学习笔记了.更需要的朋友参考. 阅读须知: 本文不是纯粹的译文,只是比较贴近原文的笔记:         请设法购买到出版社出版的书,支持正版. 从书名就能看出来本书是介绍在Pytho

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件

Python学习笔记--未经排版

Python 学习笔记 Python中如何做到Print() 不换行 答:Print("输出内容",end='不换行的分隔内容'),其中end=后面为2个单引号 注:在Python 2.x中,Print "输出内容", 即在输出内容后加一逗号 Python中 is 和 == 的区别 答:Python中的对象包含三要素:id.type.value 其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值 is判断的是a对象是否就是b对象,是通过id来

Python学习笔记_Python对象

Python学习笔记_Python对象 Python对象 标准类型 其他内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比较 对象身份比较 布尔类型 标准类型的内建函数 typeObj cmpobj1 obj2 strobj reprobj typeobj isinstanceobj 标准类型的分类 存储模型 更新模型 访问模型 不支持的类型 Python学习笔记_Python对象 首先来理解一个通俗的含义,什么是对象?其实对象无论在什么语言里面

python 学习笔记 14 -- 常用的时间模块之datetime

书接上文,前面我们讲到<常用的时间模块之time>,这次我们学习datetime -- 日期和时间值管理模块 使用apihelper 查看datetime 模块,我们可以看到简单的几项: date       ---  日期对象,结构为date(year, month, day) time       ---  时间值对象,结构为 time([hour[, minute[, second[, microsecond[, tzinfo]]]]]).时间对象所有的参数都是可选的.tzinfo 可以

python 学习笔记 3 -- 数据结构篇上

数据结构是可以处理一些 数据 的 结构 .或者说,它们是用来存储一组相关数据的.在Python中有三种内建的数据结构--列表.元组和字典.本文主要对这三种数据类型以及相关的使用做介绍,以例子的形式演示更加容易理解! 1.列表(List) 列表是处理一组有序项目的数据结构,即你可以在一个列表中存储一个 序列 的项目.在Python中,你在每个项目之间用逗号分割. 列表中的项目应该包括在**方括号**中,这样Python就知道你是在指明一个列表.一旦你创建了一个列表,你可以添加.删除或是搜索列表中的

python 学习笔记 3 -- 数据结构篇下

5.引用 当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 引用 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存.这被称作名称到对象的绑定.eg. [python] view plaincopy # -*- coding: utf-8 -*- shoplist = ['apple', 'mango', 'carrot', 'banana'] print "we copy the shoplist to mylist directly \"with

Python 学习笔记 5

5.1变量和表达式 例子5.1复利计算机(Simple Compound -Interest Calculation) 按照数字(int)类型输出: <span style="font-size:18px;">import string principal=1000 #Initial amount rate =0.05 #Interest rate numyears=5 #Number of years year =1 while year <= numyears:

Python学习笔记4(浅拷贝、深拷贝)

注:此博客搬运自http://www.cnblogs.com/Eva-J/p/5534037.html,有需要的朋友希望你们去原博客观看,给予原创更多的尊重. 注:我写一遍是为加深自己的印象,备查也方便,内容可能根据自己的情况有所删减,所以还是希望你们去原博客观看,谢谢~ 1.Python的变量及其存储形式 在Python学习笔记1中我们简单提到过变量这个概念,那么现在简单理解一下变量具体是如何存储数据的. Python采用了引用语义的方式存储变量,存储的内容只是这个变量的值所在的内存地址,而不