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. SVN 树冲突的解决方法(Ubuntu 环境)

    今天在 服务器上(Ubuntu) svn up 更新的时候,出现了 SVN 树冲突 root@futongdai:~# cd /home/wwwroot/newcrm.ofim.com/ root@f ...

  2. Linux 计划任务 Crontab 笔记与总结(5)crontab 常见错误与案例

    ① 环境变量 cd ~ pwd 就会到你登陆的那个用户的根目录下 ls -a 能够查看到 .bash_profile 这个文件 vim .bash_profile 这里面设置了一些环境变量. 可以设置 ...

  3. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [2] 首页 APP 接口开发方案 ① 读取数据库方式

    方案一:读取数据库方式 从数据库读取信息→封装→生成接口数据 应用场景: 数据时效性比较高的系统 方案二:读取缓存方式 从数据库获取信息(第一次设置缓存或缓存失效时)→封装(第一次设置缓存或缓存失效时 ...

  4. System.Data.OracleClient.OracleConnection已过时

    解决办法如下: 1.把原来的using System.Data.OracleClient;去掉 2.在oracle安装目录下找到Oracle.DataAccess.dll 添加引用:using Ora ...

  5. hiho42 : 骨牌覆盖问题·二

    描述 上一周我们研究了2xN的骨牌问题,这一周我们不妨加大一下难度,研究一下3xN的骨牌问题?所以我们的题目是:对于3xN的棋盘,使用1x2的骨牌去覆盖一共有多少种不同的覆盖方法呢?首先我们可以肯定, ...

  6. [daily][optimize] 一个小python程序的性能优化 (python类型转换函数引申的性能优化)

    前天,20161012,到望京面试.第四个职位,终于进了二面.好么,结果人力安排完了面试时间竟然没有通知我,也没有收到短信邀请.如果没有短信邀请门口的保安大哥是不让我进去大厦的.然后,我在11号接到了 ...

  7. CC2540的使用入门

    目录 1. 介绍 2. 开发环境 3. SDCC 1. 介绍 CC2540是一款2.4GHz Bluetooth® low energy SOC,基于8051 MCU 首先,你需要硬件设备 笔者的开发 ...

  8. Union Find and search

    1.POJ2488 A Knight's Journey search #include<iostream> #include<cstring> #include<alg ...

  9. java JDK8 学习笔记——助教学习博客汇总

    java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...

  10. RelativeLayout不能调用measure去直接测量子元素

    RelativeLayout在实现onMeasure方法时并没有像LinearLayout一样去重写如下代码: @Override protected void onMeasure(int width ...