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 ...
随机推荐
- SVN 树冲突的解决方法(Ubuntu 环境)
今天在 服务器上(Ubuntu) svn up 更新的时候,出现了 SVN 树冲突 root@futongdai:~# cd /home/wwwroot/newcrm.ofim.com/ root@f ...
- Linux 计划任务 Crontab 笔记与总结(5)crontab 常见错误与案例
① 环境变量 cd ~ pwd 就会到你登陆的那个用户的根目录下 ls -a 能够查看到 .bash_profile 这个文件 vim .bash_profile 这里面设置了一些环境变量. 可以设置 ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [2] 首页 APP 接口开发方案 ① 读取数据库方式
方案一:读取数据库方式 从数据库读取信息→封装→生成接口数据 应用场景: 数据时效性比较高的系统 方案二:读取缓存方式 从数据库获取信息(第一次设置缓存或缓存失效时)→封装(第一次设置缓存或缓存失效时 ...
- System.Data.OracleClient.OracleConnection已过时
解决办法如下: 1.把原来的using System.Data.OracleClient;去掉 2.在oracle安装目录下找到Oracle.DataAccess.dll 添加引用:using Ora ...
- hiho42 : 骨牌覆盖问题·二
描述 上一周我们研究了2xN的骨牌问题,这一周我们不妨加大一下难度,研究一下3xN的骨牌问题?所以我们的题目是:对于3xN的棋盘,使用1x2的骨牌去覆盖一共有多少种不同的覆盖方法呢?首先我们可以肯定, ...
- [daily][optimize] 一个小python程序的性能优化 (python类型转换函数引申的性能优化)
前天,20161012,到望京面试.第四个职位,终于进了二面.好么,结果人力安排完了面试时间竟然没有通知我,也没有收到短信邀请.如果没有短信邀请门口的保安大哥是不让我进去大厦的.然后,我在11号接到了 ...
- CC2540的使用入门
目录 1. 介绍 2. 开发环境 3. SDCC 1. 介绍 CC2540是一款2.4GHz Bluetooth® low energy SOC,基于8051 MCU 首先,你需要硬件设备 笔者的开发 ...
- Union Find and search
1.POJ2488 A Knight's Journey search #include<iostream> #include<cstring> #include<alg ...
- java JDK8 学习笔记——助教学习博客汇总
java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...
- RelativeLayout不能调用measure去直接测量子元素
RelativeLayout在实现onMeasure方法时并没有像LinearLayout一样去重写如下代码: @Override protected void onMeasure(int width ...