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接口、Java抽象类、C++抽象类的区别

    由于这三种数据类型都是为了创建类层次结构的顶层构架,且用法有些许相似之处,这里简单区分一下: 接口: 接口用interface关键字定义, 名字一般使用-able形式的形容词. 接口通常定义抽象方法和 ...

  2. Redhat系列Linux的基础命令

    为网卡配置静态IP地址vi /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0ONBOOT=yesBOOTPROTO=staticHWADDR=0 ...

  3. 【液晶模块系列基础视频】5.2.X-GUI字体驱动2

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

  4. JavaScript正则验证邮箱

    正则表达式/^正则$/.test() <html> <head> <title>JavaScript</title> <meta charset= ...

  5. oracle sql日期比较

    oracle sql日期比较:在今天之前: select * from up_date where update < to_date('2007-09-07 00:00:00','yyyy-mm ...

  6. CSS权威指南 - 浮动和定位 2

    定位 定位的想法很简单元素框相对于正常位置出现在哪里. 定位:static,相对, 绝对, fixed, 继承 static就是默认的位置 相对就是相对于默认位置的偏移.原来的static定位位置依然 ...

  7. TenxCloud时速云.htaccess不起作用的解决办法

    在新建容器时添加变量: ALLOW_OVERRIDE ,并将值设置为 TURE 即可.

  8. BAT批处理(二)

    在前一篇中已对BAT批处理基础作了一些总结,但是对于BAT批处理还有很多的知识点没有讲解到,比如DOS中的特殊符号:IF.FOR的使用:变量:更多的DOS命令等等.本文在前一篇的基础上继续对BAT批处 ...

  9. Introducing the Accelerated Mobile Pages Project, for a faster, open mobile web

    https://googleblog.blogspot.com/2015/10/introducing-accelerated-mobile-pages.html October 7, 2015 Sm ...

  10. ajax+jsp自动刷新

    通过 AJAX,JavaScript 可使用 JavaScript 的 XMLHttpRequest 对象来直接与服务器进行通信.通过这个对象, JavaScript 可在不重载页面的情况与 Web ...