python标准库有pickle_Python标准库05 存储对象 (pickle包,cPickle包)-阿里云开发者社区...
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!
在之前对Python对象的介绍中 (面向对象的基本概念,面向对象的进一步拓展),我提到过Python“一切皆对象”的哲学,在Python中,无论是变量还是函数,都是一个对象。当Python运行时,对象存储在内存中,随时等待系统的调用。然而,内存里的数据会随着计算机关机和消失,如何将对象保存到文件,并储存在硬盘上呢?
计算机的内存中存储的是二进制的序列 (当然,在Linux眼中,是文本流)。我们可以直接将某个对象所对应位置的数据抓取下来,转换成文本流 (这个过程叫做serialize),然后将文本流存入到文件中。由于Python在创建对象时,要参考对象的类定义,所以当我们从文本中读取对象时,必须在手边要有该对象的类定义,才能懂得如何去重建这一对象。从文件读取时,对于Python的内建(built-in)对象 (比如说整数、词典、表等等),由于其类定义已经载入内存,所以不需要我们再在程序中定义类。但对于用户自行定义的对象,就必须要先定义类,然后才能从文件中载入对象 (比如面向对象的基本概念中的对象那个summer)。
pickle包
对于上述过程,最常用的工具是Python中的pickle包。
1) 将内存中的对象转换成为文本流:
importpickle# define class
classBird(object):
have_feather=True
way_of_reproduction= 'egg'
summer = Bird() #construct an object
picklestring = pickle.dumps(summer) #serialize object
使用pickle.dumps()方法可以将对象summer转换成了字符串 picklestring(也就是文本流)。随后我们可以用普通文本的存储方法来将该字符串储存在文件(文本文件的输入输出)。
当然,我们也可以使用pickle.dump()的方法,将上面两部合二为一:
importpickle
#define class
classBird(object):
have_feather=True
way_of_reproduction= 'egg'summer= Bird() #construct an object
fn = 'a.pkl'with open(fn, 'w') as f: # open file with write-mode
picklestring= pickle.dump(summer, f) #serialize and save object
对象summer存储在文件a.pkl
2) 重建对象
首先,我们要从文本中读出文本,存储到字符串 (文本文件的输入输出)。然后使用pickle.loads(str)的方法,将字符串转换成为对象。要记得,此时我们的程序中必须已经有了该对象的类定义。
此外,我们也可以使用pickle.load()的方法,将上面步骤合并:
importpickle#define the class before unpickle
classBird(object):
have_feather=True
way_of_reproduction= 'egg'fn= 'a.pkl'with open(fn,'r') as f:
summer=pickle.load(f) #read file and build object
cPickle包
cPickle包的功能和用法与pickle包几乎完全相同 (其存在差别的地方实际上很少用到),不同在于cPickle是基于c语言编写的,速度是pickle包的1000倍。对于上面的例子,如果想使用cPickle包,我们都可以将import语句改为:
import cPickle as pickle
就不需要再做任何改动了。
总结
对象 -> 文本 -> 文件
pickle.dump(), pickle.load(), cPickle
python标准库有pickle_Python标准库05 存储对象 (pickle包,cPickle包)-阿里云开发者社区...相关推荐
- python中引入sql的优点_引用sql-和引用sql相关的内容-阿里云开发者社区
bboss持久层改进支持模块sql配置文件引用其它模块sql配置文件中sql语句 bboss持久层改进支持模块sql配置文件引用其它模块sql配置文件中sql语句. 具体使用方法如下: <pro ...
- python if else用法同一行_在Python的同一行中使用if else for和del吗?-问答-阿里云开发者社区-阿里云...
我有一个列表,其项目是可变长度的列表. 如果这些可变长度的列表项超过此长度,则需要将其截断为特定长度(x). 我做了这个小的功能. def truncateList(batch_, trim_len) ...
- 命令python所在的驱动器和文件夹_Python文件夹与文件的操作-阿里云开发者社区...
最近在写的程序频繁地与文件操作打交道,这块比较弱,还好在百度上找到一篇不错的文章,这是原文传送门,我对原文稍做了些改动. 有关文件夹与文件的查找,删除等功能 在os模块中实现.使用时需先导入这个模块, ...
- Python标准库05 存储对象 (pickle包,cPickle包)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 谢谢reverland纠错 在之前对Python对象的介绍中 (面向对象的基本概念 ...
- 不属于python标准库的是_《Python Cookbook(第2版)中文版》——1.10 过滤字符串中不属于指定集合的字符-阿里云开发者社区...
本节书摘来自异步社区<Python Cookbook(第2版)中文版>一书中的第1章,第1.10节,作者[美]Alex Martelli , Anna Martelli Ravenscro ...
- boost库 python_Boost.Python简介-阿里云开发者社区
Boost.Python简单概括:是Boost库的一部分:用来在C++代码中调用python代码以及在Python代码中调用C++代码,并且避免用户直接操作指针. 简介 BoostPython库让C+ ...
- python 黑客工具开发_python黑客软件的搜索结果-阿里云开发者社区
带你读<Python科学计算(原书第2版)>之一:导论 计算机科学丛书点击查看第二章点击查看第三章Python科学计算(原书第2版)Python for Scientists, Secon ...
- python树莓派编程 沃尔弗拉姆_《 Python树莓派编程》——3.3 Python入门-阿里云开发者社区...
本节书摘来自华章出版社<Python树莓派编程>一书中的第3章,第3.3节,作者:[美]沃尔弗拉姆·多纳特(Wolfram Donat)著韩德强 等译,更多章节内容可以访问云栖社区&quo ...
- python的requests模块功能_《Python数据可视化编程实战》—— 1.7 安装requests模块-阿里云开发者社区...
本节书摘来异步社区<Python数据可视化编程实战>一书中的第1章,第1.7节,作者:[爱尔兰]Igor Milovanović,更多章节内容可以访问云栖社区"异步社区" ...
最新文章
- NSubstitute完全手册(二)创建替代实例
- linux环境变量恢复,linux环境变量设置错误后的恢复方法(转)
- kali linux 学习 NETCAT NC的使用
- 面向dba的linux shell 脚本简介,面向dba的linuxshell脚本简介.doc
- 变量定义和声明的区别~~~概念上千万不要栽跟头!!!
- Elasticsearch之需要注意的问题(es和jdk版本)
- js正则限制字符串长度_正则笔记(3)万字长文,慎点。
- bert模型简介、transformers中bert模型源码阅读、分类任务实战和难点总结
- linux rdma测试,硬件RDMA的驱动配置和测试
- 简单易懂的ueditor新手教程
- 近期CDRX4正常使用中突然提示盗版弹窗您的产品已被禁用永久解决教程
- Python的学习笔记案例4--52周存钱挑战2.0
- 服装ERP软件有哪些优点?
- 解决VMware虚拟机安装ikuai限速10M
- 概率论中的矩母函数(MGF)
- C++设计模式8--装饰模式 Decorator --动态的增减功能
- RouterOS的DNS设置说明
- 分享 10 个常见的 CSS 页面布局代码片段
- 给程序员新年巨献:Google最热门60款开源项目
- 顶峰Android手机视频转换器,凡人Android手机视频转换器
热门文章
- c语言多线程面试题,iOS面试题--网络多线程
- 两个网口芯片接一个变压器_一看就会:详细讲解网络变压器作用
- mysql数据库被远程连接_如何让mysql数据库准许被远程连接访问
- POJ 2240 Arbitrage(SPFA判正环)
- android spi读写不通,Android-SPI学习笔记
- matlab程序 surf算法,【求大神帮忙,surf算法源代码解析】
- Centos/Linux在线环境下载安装包,到离线环境安装,并解决依赖问题
- Python生成(x,y,z)三维坐标序列
- Ubuntu 打开 initramfs
- 中如何移动物体在画面中的位置_如何在弱光环境中拍摄运动物体