Python模块(pickle)
pickle
序列化和反序列化
序列化作用
序列化使用
cPickle使用例
Python提供一个标准的模块,称为pickle。使用它你可以在一个文件中储存任何Python对象,之后你又可以把它完整无缺地取出来。这被称为持久地储存对象。
还有另一个模块称为cPickle,它的功能和pickle模块完全相同,只不过它是用C语言编写的,因此要快得多(比pickle快1000倍)。你可以使用它们中的任一个,而我们在这里将使用cPickle模块。记住,我们把这两个模块都简称为pickle模块。
一、序列化和反序列化
把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling --从内存保存到磁盘文件
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling --从磁盘文件读到内存
序列化作用
程序运行过程中变量都是在内存中保存,当程序运行完成后,变量占用的内存将会被系统回收,内存是不能持久保存对象的,当系统重启时定义的变量也将丢失,所以将对象存储在文件中是一种方法(持久化方式存储),随时可以取出来
序列化使用
imprt cPickle #导出模块
cPickle.dumps('object') #序列化对象,返回string类型
cPickle.dump('object') #序列化对象到文件中
cPickle.loads('object') #反序列化对象
cPickle.load('object') #从文件中反序列对象,返回原先的object
注意:对象进行反序列后只是一个string类型数据对象,同样load或loads的对象也是必须是string类型
带s以不带s的区别主要是要不要以文件对象作为序列化操作
****可以用dumps序列化数据,再写到文件中
****可以从文件中load序列化的数据,也可以直接loads进行反序列化
序列化不一定需要存储
####cPickle使用例:
案例1:
>>> import cPickle
>>> list1 #一个list数据类型对象
['list1', 'list2', 'list3']
>>> cPickle.dumps(list1) #将这个list对象反序列化,返回一个str类型
"(lp1\nS'list1'\np2\naS'list2'\np3\naS'list3'\np4\na."
#直接loads这个数据进行反序列化,得到了list的对象
>>> cPickle.loads("(lp1\nS'list1'\np2\naS'list2'\np3\naS'list3'\np4\na.")
['list1', 'list2', 'list3']
案例2:
>>> import cPickle
****定义一个list,将list对象dump到文件中,完成序列化
>>> list1 = ['list1','list2','list3']
>>> list1
['list1', 'list2', 'list3']
>>> f = open('/var/tmp/dump.data','a+')
>>> cPickle.dump(list1,f) #用cPickle.dump将这个list1对象dump到文件中
>>> f.close()
****删除这个list对象
>>> del list1
>>> list1 #删除对象后抛出NameError异常,因为已经没有这个对象了
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'list1' is not defined
****将对象从文件中load过来,完成反序列化对象
>>> f = open('/var/tmp/dump.data')
>>> list1 = cPickle.load(f)
>>> list1
['list1', 'list2', 'list3']
>>> f.close()
>>> list1 #对象又重新回来了
['list1', 'list2', 'list3']
>>> cPickle.dumps(list1) #将对象序列化成str,也可以在写到文件中,或者直接用上面的dump
"(lp1\nS'list1'\np2\naS'list2'\np3\naS'list3'\np4\na."
牢记:dumps出来是string对象, dumps到文件需要有写的权限,而load只需要读的权限
每次使用文件注意关闭
序列化后的文件后缀名称为pkl
Python模块(pickle)的更多相关文章
- python模块--pickle&json&shelve
使用file文件处理时,写入的必须是str ,否则会报错. 例如:要把一个字典写入文件,写入时会报错 ,就算转换成str格式写入,读取的时候也不能按照dict格式读. >>> inf ...
- python模块概况,json/pickle,time/datetime,logging
参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html http://www.cnblogs.com/alex3714/articles/51 ...
- python模块之pickle、shelve、json
一 什么是序列化 序列化指的是将内存中的数据结构转化为一种中间格式,并存储到硬盘上. (反序列化:将硬盘上存储的中间格式数据再还原为内存中的数据结构) 二 为什么要序列化 持久保持状态 需知一个软件/ ...
- python(31)——【sys模块】【json模块 & pickle模块】
一.sys模块 import sys sys.argv #命令行参数List,第一个元素是程序本身路径 sys.exit() #退出程序,正常退出时exit(0) sys.version #获取pyt ...
- Python之对象的永久保存模块---pickle
经常遇到在Python程序运行中得到了一些字符串.列表.字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据. 这个时候Pickle模块就派上用场了,它可以将对象转换 ...
- python 模块 - 序列化 json 和 pickle
1,引入 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,eval ...
- python的pickle和shelve模块
python中用于序列化的模块总结 目录 pickle模块 shelve模块 xml模块 pickle模块 介绍 Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python, ...
- python模块-json、pickle、shelve
json模块 用于文件处理时其他数据类型与js字符串之间转换.在将其他数据类型转换为js字符串时(dump方法),首先将前者内部所有的单引号变为双引号,再整体加上引号(单或双)转换为js字符串:再使用 ...
- python模块--json \ pickle \ shelve \ XML模块
一.json模块 之前学习过的eval内置方法可以将一个字符串转成一个python对象,不过eval方法时有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,e ...
随机推荐
- Java泛型总结
1. 什么是泛型?泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的 ...
- MySQL数据库管理常用命令
参考: http://blog.linuxeye.com/419.html 安装 利用RPM包安装MySQL 设置TCP 3306端口的iptables root密码管理 设置root用户 ...
- 《GK101任意波发生器》升级固件发布(版本:1.0.2build955)
一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build955 编译日期:2015-12-14 ====================================== 二. ...
- 【新产品发布】【iM_TFTRGB 液晶驱动模块】
============================== 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:h ...
- 单词游戏-基于SQLite+Qt的C++项目
SQLite文件数据库的操作 Qt插件的安装配置 1.VS2008下安装Qt开发包 解压缩4.7.3.rar到C:\Qt\4.7.3\ Qt for VS addin2.安装并配置Visual Ass ...
- Java类型相互转换byte[]类型,blob类型
在我们的程序开发当中,经常会用到java.sql.Blob.byte[].InputStream之间的相互转换,但在JDK的API当中,又没有直接给我们提供可用的API,下面的程序片段主要就是实现它们 ...
- JavaScript系列:event.bubbles属性(并不是所有的事件都具有冒泡)
地址 https://www.w3.org/TR/DOM-Level-3-Events/#h3_interface-Event https://segmentfault.com/q/101000000 ...
- Tesla-> Fermi (550Ti) -> Kepler(680) -> Maxwell (750Ti) -> Volta(was Pascal)
Pascal GPU Pascal (from French mathematician Blaise Pascal) is Maxwell successor. In this news, we l ...
- NV Perf Kit
https://developer.nvidia.com/gameworksdownload#?dn=perfkit-4-0-0 Title Version Release Date PerfKit ...
- Web交互设计优化的简易check list
Web交互设计优化的简易check list 00 | 时间: 2011-02-11 | 28,842 Views 交互设计, 用户研究 “优化已有产品的体验”,这是用户体验相关岗位职责中常见的描 ...