作者: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包)-阿里云开发者社区...相关推荐

  1. python中引入sql的优点_引用sql-和引用sql相关的内容-阿里云开发者社区

    bboss持久层改进支持模块sql配置文件引用其它模块sql配置文件中sql语句 bboss持久层改进支持模块sql配置文件引用其它模块sql配置文件中sql语句. 具体使用方法如下: <pro ...

  2. python if else用法同一行_在Python的同一行中使用if else for和del吗?-问答-阿里云开发者社区-阿里云...

    我有一个列表,其项目是可变长度的列表. 如果这些可变长度的列表项超过此长度,则需要将其截断为特定长度(x). 我做了这个小的功能. def truncateList(batch_, trim_len) ...

  3. 命令python所在的驱动器和文件夹_Python文件夹与文件的操作-阿里云开发者社区...

    最近在写的程序频繁地与文件操作打交道,这块比较弱,还好在百度上找到一篇不错的文章,这是原文传送门,我对原文稍做了些改动. 有关文件夹与文件的查找,删除等功能 在os模块中实现.使用时需先导入这个模块, ...

  4. Python标准库05 存储对象 (pickle包,cPickle包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 谢谢reverland纠错 在之前对Python对象的介绍中 (面向对象的基本概念 ...

  5. 不属于python标准库的是_《Python Cookbook(第2版)中文版》——1.10 过滤字符串中不属于指定集合的字符-阿里云开发者社区...

    本节书摘来自异步社区<Python Cookbook(第2版)中文版>一书中的第1章,第1.10节,作者[美]Alex Martelli , Anna Martelli Ravenscro ...

  6. boost库 python_Boost.Python简介-阿里云开发者社区

    Boost.Python简单概括:是Boost库的一部分:用来在C++代码中调用python代码以及在Python代码中调用C++代码,并且避免用户直接操作指针. 简介 BoostPython库让C+ ...

  7. python 黑客工具开发_python黑客软件的搜索结果-阿里云开发者社区

    带你读<Python科学计算(原书第2版)>之一:导论 计算机科学丛书点击查看第二章点击查看第三章Python科学计算(原书第2版)Python for Scientists, Secon ...

  8. python树莓派编程 沃尔弗拉姆_《 Python树莓派编程》——3.3 Python入门-阿里云开发者社区...

    本节书摘来自华章出版社<Python树莓派编程>一书中的第3章,第3.3节,作者:[美]沃尔弗拉姆·多纳特(Wolfram Donat)著韩德强 等译,更多章节内容可以访问云栖社区&quo ...

  9. python的requests模块功能_《Python数据可视化编程实战》—— 1.7 安装requests模块-阿里云开发者社区...

    本节书摘来异步社区<Python数据可视化编程实战>一书中的第1章,第1.7节,作者:[爱尔兰]Igor Milovanović,更多章节内容可以访问云栖社区"异步社区" ...

最新文章

  1. NSubstitute完全手册(二)创建替代实例
  2. linux环境变量恢复,linux环境变量设置错误后的恢复方法(转)
  3. kali linux 学习 NETCAT NC的使用
  4. 面向dba的linux shell 脚本简介,面向dba的linuxshell脚本简介.doc
  5. 变量定义和声明的区别~~~概念上千万不要栽跟头!!!
  6. Elasticsearch之需要注意的问题(es和jdk版本)
  7. js正则限制字符串长度_正则笔记(3)万字长文,慎点。
  8. bert模型简介、transformers中bert模型源码阅读、分类任务实战和难点总结
  9. linux rdma测试,硬件RDMA的驱动配置和测试
  10. 简单易懂的ueditor新手教程
  11. 近期CDRX4正常使用中突然提示盗版弹窗您的产品已被禁用永久解决教程
  12. Python的学习笔记案例4--52周存钱挑战2.0
  13. 服装ERP软件有哪些优点?
  14. 解决VMware虚拟机安装ikuai限速10M
  15. 概率论中的矩母函数(MGF)
  16. C++设计模式8--装饰模式 Decorator --动态的增减功能
  17. RouterOS的DNS设置说明
  18. 分享 10 个常见的 CSS 页面布局代码片段
  19. 给程序员新年巨献:Google最热门60款开源项目
  20. 顶峰Android手机视频转换器,凡人Android手机视频转换器

热门文章

  1. c语言多线程面试题,iOS面试题--网络多线程
  2. 两个网口芯片接一个变压器_一看就会:详细讲解网络变压器作用
  3. mysql数据库被远程连接_如何让mysql数据库准许被远程连接访问
  4. POJ 2240 Arbitrage(SPFA判正环)
  5. android spi读写不通,Android-SPI学习笔记
  6. matlab程序 surf算法,【求大神帮忙,surf算法源代码解析】
  7. Centos/Linux在线环境下载安装包,到离线环境安装,并解决依赖问题
  8. Python生成(x,y,z)三维坐标序列
  9. Ubuntu 打开 initramfs
  10. 中如何移动物体在画面中的位置_如何在弱光环境中拍摄运动物体