零基础学习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的配置 ...
随机推荐
- verilog编码规范
verilog编码规范 1.Register with Rising-Edge Coding Example (Verilog) Flip-Flops and Registers Control Si ...
- 简单谈谈JS数组中的indexOf方法
前言 相信说到 indexOf 大家并不陌生,判断字符串是否包涵子字符串时特别常用,正则不熟练同学的利器.这篇文章就最近遇到的一个问题,用实例再说说说indexOf方法.本文是小知识点积累,不作为深入 ...
- InfluxDB中文文档
来源:https://github.com/jasper-zhang/influxdb-document-cn InfluxDB中文文档 InfluxDB是一个用于存储和分析时间序列数据的开源数据库. ...
- angular的组件通信
参见这里 总结如下: @Input和@Ouptut 获取父实例,获取子实例 通过service共享数据 发送事件EventEmitter(个人喜欢angular-event-service) rx ...
- 黄聪:PHP调试显示所有错误信息
ini_set('display_errors',1); //错误信息 ini_set('display_startup_errors',1); //php启动错误信息 error_reporting ...
- android 退出程序解决内存释放so的问题
做Android程序的时候发现一个问题,由于用到了so库,当应用程序退出了,但是手机变得很卡,点击"设置"查看应用程序,界面显示着可以点击"强制关闭". 由于这 ...
- What is SolrCloud? (And how does it compare to master-slave?)
What is SolrCloud? (And how does it compare to master-slave?) SolrCloud is a set of new features and ...
- Maven打包将所有的依赖都打入
附上pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...
- 10分钟复习javaweb
html:是网页的骨架,静态网页初步的轮廓,简单粗糙,僵硬又没有美感.表单的标签<form>,里面的<input>很常用,里面有type属性等css:为了更加灵活,常与div一 ...
- Django的模板层简介
Django的模板层 如果我们想要利用视图函数返回一个页面,一种比较简单的方式是利用HttpResponse()方法返回一个含有html内容的字符串: def current_datetime(req ...