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)的更多相关文章

  1. python模块--pickle&json&shelve

    使用file文件处理时,写入的必须是str ,否则会报错. 例如:要把一个字典写入文件,写入时会报错 ,就算转换成str格式写入,读取的时候也不能按照dict格式读. >>> inf ...

  2. python模块概况,json/pickle,time/datetime,logging

    参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html http://www.cnblogs.com/alex3714/articles/51 ...

  3. python模块之pickle、shelve、json

    一 什么是序列化 序列化指的是将内存中的数据结构转化为一种中间格式,并存储到硬盘上. (反序列化:将硬盘上存储的中间格式数据再还原为内存中的数据结构) 二 为什么要序列化 持久保持状态 需知一个软件/ ...

  4. python(31)——【sys模块】【json模块 & pickle模块】

    一.sys模块 import sys sys.argv #命令行参数List,第一个元素是程序本身路径 sys.exit() #退出程序,正常退出时exit(0) sys.version #获取pyt ...

  5. Python之对象的永久保存模块---pickle

    经常遇到在Python程序运行中得到了一些字符串.列表.字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据. 这个时候Pickle模块就派上用场了,它可以将对象转换 ...

  6. python 模块 - 序列化 json 和 pickle

    1,引入 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,eval ...

  7. python的pickle和shelve模块

    python中用于序列化的模块总结 目录 pickle模块 shelve模块 xml模块 pickle模块 介绍 Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python, ...

  8. python模块-json、pickle、shelve

    json模块 用于文件处理时其他数据类型与js字符串之间转换.在将其他数据类型转换为js字符串时(dump方法),首先将前者内部所有的单引号变为双引号,再整体加上引号(单或双)转换为js字符串:再使用 ...

  9. python模块--json \ pickle \ shelve \ XML模块

    一.json模块 之前学习过的eval内置方法可以将一个字符串转成一个python对象,不过eval方法时有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,e ...

随机推荐

  1. Java泛型总结

    1. 什么是泛型?泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的 ...

  2. MySQL数据库管理常用命令

    参考: http://blog.linuxeye.com/419.html 安装 利用RPM包安装MySQL   设置TCP 3306端口的iptables     root密码管理 设置root用户 ...

  3. 《GK101任意波发生器》升级固件发布(版本:1.0.2build955)

    一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build955 编译日期:2015-12-14 ====================================== 二. ...

  4. 【新产品发布】【iM_TFTRGB 液晶驱动模块】

    ============================== 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:h ...

  5. 单词游戏-基于SQLite+Qt的C++项目

    SQLite文件数据库的操作 Qt插件的安装配置 1.VS2008下安装Qt开发包 解压缩4.7.3.rar到C:\Qt\4.7.3\ Qt for VS addin2.安装并配置Visual Ass ...

  6. Java类型相互转换byte[]类型,blob类型

    在我们的程序开发当中,经常会用到java.sql.Blob.byte[].InputStream之间的相互转换,但在JDK的API当中,又没有直接给我们提供可用的API,下面的程序片段主要就是实现它们 ...

  7. JavaScript系列:event.bubbles属性(并不是所有的事件都具有冒泡)

    地址 https://www.w3.org/TR/DOM-Level-3-Events/#h3_interface-Event https://segmentfault.com/q/101000000 ...

  8. 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 ...

  9. NV Perf Kit

    https://developer.nvidia.com/gameworksdownload#?dn=perfkit-4-0-0 Title Version Release Date PerfKit  ...

  10. Web交互设计优化的简易check list

    Web交互设计优化的简易check list 00 | 时间: 2011-02-11 | 28,842 Views 交互设计, 用户研究   “优化已有产品的体验”,这是用户体验相关岗位职责中常见的描 ...