零基础学习python_pickle(31课)
上次我提到了对文件的读写等一系列操作,回想下,要想从文件内读取内容无论是read还是readline,读取出来的是不是都是字符串呢?那么如果想让字典、列表这些数据类型保存进文件到读取出来都是原来的类型不变呢?这时我们引进一个pytho新的模块,解决这个难题!
pickle的实质就是利用一些算法将你的数据对象转变成二进制文件,储存在磁盘上,也可存在数据库或者其它机器上。
pickling(存放):可以将python的对象以二进制流形式存放在文件内
unpickling(读取):将文件内的二进制流转换为对象
1、下面是存放list1这个列表到d盘test.pkl文件内:

记得打开文件要以二进制形式打开(b)
pickle.dump(obj, file, [,protocol])
注解:将对象obj保存到文件file中去。
protocol为序列化使用的协议版本,0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;1:老式的二进制协议;2:2.3版本引入的新二进制协议,较以前的更高效。其中协议0和1兼容老版本的python。protocol默认值为0。
file:对象保存到的类文件对象。file必须有write()接口, file可以是一个以'w'方式打开的文件或者一个StringIO对象或者其他任何实现write()接口的对象。如果protocol>=1,文件对象需要是二进制模式打开的。
2、下面是从文件内读取刚刚保存的列表:

依旧是以二进制形式读取文件(rb)
pickle.load(file)
注解:从file中读取一个字符串,并将它重构为原来的python对象。
file:类文件对象,有read()和readline()接口。
练习题:将文件(record.txt)中的数据使用pickle将文件分割成不同文件:
小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”)
小客服的对话单独保存为girl_*.txt的文件(去掉“小客服:”)
文件中总共有三段对话,分别保存为boy_1.txt, girl_1.txt,boy_2.txt, girl_2.txt, boy_3.txt, gril_3.txt共6个文件(提示:文件中不同的对话间已经使用“==========”分割)
record.txt文件内容如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
小客服:小甲鱼,今天有客户问你有没有女朋友?小甲鱼:咦??小客服:我跟她说你有女朋友了!小甲鱼:。。。。。。小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"小甲鱼:然后呢?小客服:她买了两个,说发一个货就好~小甲鱼:呃。。。。。。你真牛!小客服:那是,谁让我是鱼C最可爱小客服嘛~小甲鱼:下次有人想调戏你我不阻止~小客服:滚!!!================================================================================小客服:小甲鱼,有个好评很好笑哈。小甲鱼:哦?小客服:"有了小甲鱼,以后妈妈再也不用担心我的学习了~"小甲鱼:哈哈哈,我看到丫,我还发微博了呢~小客服:嗯嗯,我看了你的微博丫~小甲鱼:哟西~小客服:那个有条回复“左手拿著小甲魚,右手拿著打火機,哪裡不會點哪裡,so easy ^_^”小甲鱼:T_T================================================================================小客服:小甲鱼,今天一个会员想找你小甲鱼:哦?什么事?小客服:他说你一个学生月薪已经超过12k了!!小甲鱼:哪里的?小客服:上海的小甲鱼:那正常,哪家公司?小客服:他没说呀。小甲鱼:哦小客服:老大,为什么我工资那么低啊??是时候涨涨工资了!!小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。。小客服:滚!!! |
以上即为文件内容,尝试着写出上面的代码吧,答案如下:

#coding=utf-8
def writefile(girl_list,boy_list,count): girl_file = open(r'D:\girl_'+ str(count) +'.txt','wb') boy_file = open(r'D:\boy_'+ str(count) +'.txt','wb')
girl_file.dump(girl_list,girl_file)
boy_file.dump(boy_list,boy_file) girl_file.close()
boy_file.close() def split_file(file_name):
boy_list = []
girl_list = []
count = 1
f = open(file_name) for each_line in f:
if each_line[:6] != '======':
(name,content) = each_line.split(':',1)
if name == '小客服':
girl_list.append(each_line) else:
boy_list.append(each_line) else:
writefile(girl_list,boy_list,count)
boy_list.clear()
girl_list.clear()
count += 1
writefile(girl_list,boy_list,count)
f.close() split_file('D:\\record.txt')
零基础学习python_pickle(31课)的更多相关文章
- 零基础学习Python数据分析
网上虽然有很多Python学习的教程,但是大多是围绕Python网页开发等展开.数据分析所需要的Python技能和网页开发等差别非常大,本人就是浪费了很多时间来看这些博客.书籍.所以就有了本文,希望能 ...
- Android零基础入门第31节:几乎不用但要了解的AbsoluteLayout绝对布局
原文:Android零基础入门第31节:几乎不用但要了解的AbsoluteLayout绝对布局 前面几期基本学习了Android开发中常用的四种布局,之所以把AbsoluteLayout放在后面来学习 ...
- 【转】【Salesforce】salesforce 零基础学习(十七)Trigger用法
看本篇之前可以相应阅读以下Trigger相关文章: 1.https://developer.salesforce.com/page/Trigger_Frameworks_and_Apex_Trigge ...
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- 如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...
- HTML5零基础学习Web前端需要知道哪些?
HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...
- CSS零基础学习笔记.
酸菜记 之 CSS的零基础. 这篇是我自己从零基础学习CSS的笔记加理解总结归纳的,如有不对的地方,请留言指教, 学前了解: CSS中字母是不分大小写的; CSS文件可以使用在各种程序文件中(如:PH ...
- Yaf零基础学习总结5-Yaf类的自动加载
Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件. Yaf在自启动的 ...
- Yaf零基础学习总结4-Yaf的配置文件
在上一节的hello yaf当中我们已经接触过了yaf的配置文件了, Yaf和用户共用一个配置空间, 也就是在Yaf_Application初始化时刻给出的配置文件中的配置. 作为区别, Yaf的配置 ...
随机推荐
- [VC6] 小谈如何解决VC6.0 open崩溃的问题(已解决)(转)
[昨天重装了系统,开始用VC6还是可以的,后来装了WPS,在用VC6里面的Open就崩溃了. 这个解决方法就这么几步:1.把FileTool.dll放到指定的AddIns目录.2. 注册这个dll到注 ...
- 排序算法<No.1> 【计数排序】
继上篇博文,今天我将先介绍一下什么是计数排序,将计数排序描述清楚后,再进行后续的桶排序方法解决这个问题. 通常情况下,一提到排序,大家第一反应就是比较,其实,今天我要说的这个计数排序,不是基于比较的排 ...
- oracle中delete、truncate、drop的区别
oracle中delete.truncate.drop的区别 标签: deleteoracletable存储 2012-05-23 15:12 7674人阅读 评论(0) 收藏 举报 分类: ora ...
- iphone越狱安装python2.7
cydia 添加源地址:http://apt.so/whitefur 选择python 进行安装 打开ssh连接后输入python 显示python2.7.3 安装成功
- Azure 认知服务 (3) 计算机视觉API - 分析图像,使用C#代码
<Windows Azure Platform 系列文章目录> 在上一节中Azure 认知服务 (2) 计算机视觉API - 分析图像,笔者介绍了如何使用API测试控制台进行调试. 本章将 ...
- CentOS 7.4 初次手记:第一章 Linux守护进程(daemon)
第一节 init & sysvinit 6 I sysvinit 运行顺序... 6 II Sysvinit和系统关闭... 7 III Sysvinit 的小结... 7 IV 运行级别.. ...
- java统计文件字母大小写的数量练习
import java.io.*; import java.lang.*; public class WordStatistic { private BufferedReader br; privat ...
- java反射以及动态代理的学习
java反射学习 1)字节码文件的三种获取方式 ①:Object类的getClass()方法:对象.getClass() ②:数据类型的静态的class属性:类名.class ③:通过Class类的静 ...
- awk如何向shell传值
今天写脚本,遇到awk脚本向shell传参的情况,上网谷歌一下,发现都有些麻烦,通过管道,通过eval,感觉都很复杂.于是想到用read来试一下. 首先构造一个测试文件test.txt,里面的内容是1 ...
- LinkedList的自定义实现
一.背景 LinkedList双向链表: 代码: Node.java: package com.cy.collection; public class Node { Node previous; // ...