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

# 两个列表用于存储数据
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#一些代码小结--文件对话框

    C# 一些代码小结--文件对话框 查看文件完整路径 try { Config cfg = new Config(); var file = ""; if (saveFileDial ...

  2. SL 的 DATAGRID中如何加入计算列?

    例如,我的数据库中实体表对应到EF中的实体类是 class { public int  F1; public int F2; } 我在服务端做domainservice 我在SL端使用wcf ria, ...

  3. 附2 volatile

    注:在阅读本章之前,先要了解Java内存模型,见上一章<附1 Java内存模型与共享变量可见性>,链接如下: http://www.cnblogs.com/java-zhao/p/5124 ...

  4. poj3233 Matrix Power Series(矩阵快速幂)

    题目要求的是 A+A2+...+Ak,而不是单个矩阵的幂. 那么可以构造一个分块的辅助矩阵 S,其中 A 为原矩阵,E 为单位矩阵,O 为0矩阵    将 S 取幂,会发现一个特性: Sk +1右上角 ...

  5. Python任意网段Web端口信息探测工具

    此篇关于多线程工具的文章,非常适合新手学习,工具效率也挺高的,代码也比较完善,如题. 本文作者:i春秋签约作家——Aedoo 0×00 前言 笔者前一段时间发布了原创文章,“[Python黑客] Py ...

  6. flask-mysqldb安装时EnvironmentError: mysql_config not found

    安装时候的日志如下: sh: : mysql_config: not found Traceback (most recent call last): File , in <module> ...

  7. pythonweb框架Flask学习笔记01-ubuntu18.04下安装Flask

    Flask 依赖两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 工具集 由于各个项目工程之间可能存在python库版本的差异 为了防止库版本差异对项目开发产生的影响,使用virtu ...

  8. js的let语句在安卓手机端的QQ浏览器出错的问题

    关于JavaScript里面的let,let 语句可以声明一个块级作用域的本地变量,并且可选的将其初始化为一个值. <ul id="list"> </ul> ...

  9. POJ 2346

    #include<iostream> #include<stdio.h> using namespace std; ,,,,}; int main() { int num; c ...

  10. POJ 1023

    #include <iostream> #include <string> #include <cmath> #define MAXN 65 int op[MAXN ...