python 中的pickle库

 

序列化:我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。

序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。

反序列化:

反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。

Python提供两个模块来实现序列化:cPicklepickle。这两个模块功能是一样的,区别在于cPickle是C语言写的,速度快,pickle是纯Python写的,速度慢,跟cStringIOStringIO一个道理。用的时候,先尝试导入cPickle,如果失败,再导入pickle

try:import cPickle as pickle
except ImportError:import pickle

首先,我们尝试把一个对象序列化并写入文件:

>>> d = dict(name='Bob', age=20, score=88)
>>> pickle.dumps(d)
"(dp0\nS'age'\np1\nI20\nsS'score'\np2\nI88\nsS'name'\np3\nS'Bob'\np4\ns."

pickle.dumps()方法把任意对象序列化成一个str,然后,就可以把这个str写入文件。

或者用另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object:

>>> f = open('dump.txt', 'wb')
>>> pickle.dump(d, f)
>>> f.close()

看看写入的dump.txt文件,一堆乱七八糟的内容,这些都是Python保存的对象内部信息。

 

当我们要把对象从磁盘读到内存时,可以先把内容读到一个str,然后用pickle.loads()方法反序列化出对象,也可以直接用pickle.load()方法从一个file-like Object中直接反序列化出对象。我们打开另一个Python命令行来反序列化刚才保存的对象:

>>> f = open('dump.txt', 'rb')
>>> d = pickle.load(f)
>>> f.close()
>>> d
{'age': 20, 'score': 88, 'name': 'Bob'}

变量的内容又回来了!

当然,这个变量和原来的变量是完全不相干的对象,它们只是内容相同而已。

缺点:

Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据,不能成功地反序列化也没关系。

别的方法:

如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。

参考我的另一篇文章,《python中的json序列化》

 

 

 

参考:

(1)、https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138683221577998e407bb309542d9b6a68d9276bc3dbe000

(2)、https://www.cnblogs.com/abobo/p/8080447.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

他山之石,可以攻玉——来自亚马逊的电商启示录

题记:“创新是我们的DNA,技术是我们改善客户体验的基础2009 年致股东的信” 1. 从亚马逊的成功讲起 1.1 历经8 年亏损始成正果 它是世界上所有电商的龙头和楷模,是毫无争议的行业标杆和旗帜,它在战略和经营上的一举一动都是关注的…

python数据结构-栈和队列的实现

1、栈(后进先出(last in first out,LIFO)) 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。栈被称为一种后入先出(LIFO,last-in-first-out)的数…

c#只读字段和常量的区别,以及静态构造函数的使用 .

using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{ /// <summary> /// 功能&#xff1a;c#只读字段和常量的区别&#xff0c;以及静态构造函数的使用 /// </summary> class Progra…

python中的json序列化

如果我们要在不同的编程语言之间传递对象&#xff0c;就必须把对象序列化为标准格式&#xff0c;比如XML&#xff0c;但更好的方法是序列化为JSON&#xff0c;因为JSON表示出来就是一个字符串&#xff0c;可以被所有语言读取&#xff0c;也可以方便地存储到磁盘或者通过网络传输…

android 中 四舍五入的method */

/* 四舍五入的method */private String format(double num) {NumberFormat formatter new DecimalFormat("0.00");String s formatter.format(num);return s;} 转载于:https://www.cnblogs.com/hao222/p/3485204.html

Jar 打包 EXE文件,可以脱离java环境运行 Jsmooth的使用

1、首先准备我们的资源&#xff0c;把要转换的Jar文件、精简过的JRE文件夹和想生成的EXE文件的图标&#xff08;可以是png&#xff0c;jpg等格式&#xff0c;不想加图标可以不弄&#xff09;放到同一个文件夹内。这一步一定要做&#xff0c;否则可以成功生成&#xff0c;但在没…

linux中的fork方法(python)

前言&#xff1a; Unix/Linux操作系统提供了一个fork()系统调用&#xff0c;它非常特殊。普通的函数调用&#xff0c;调用一次&#xff0c;返回一次&#xff0c;但是fork()调用一次&#xff0c;返回两次&#xff0c;因为操作系统自动把当前进程&#xff08;称为父进程&#xf…

PowerDesigner的文章

来自iteye的PowerDesigner的相关文章&#xff0c;写的不错&#xff0c;这里引用一下 PD12 建模工具的使用 博客分类&#xff1a; PowerDesigner.nethttp://jpkc.zjbti.net.cn/sjkjs/uploadfile/2007514153222522.swf2010-01-12 00:34 浏览 352 评论(0) 分类:数据库从PowerDesi…

并发(concurrency)和并行(parallellism)

并发&#xff08;concurrency&#xff09;和并行&#xff08;parallellism&#xff09;是&#xff1a; 解释一&#xff1a;并行是指两个或者多个事件在同一时刻发生&#xff1b;而并发是指两个或多个事件在同一时间间隔发生。

大公司开源共享

Google开源:https://developers.google.com/open-source/projectsFacebook开源:https://github.com/facebook阿里巴巴开源:https://github.com/alibabaIntel开源:https://01.org/http://software.intel.com/zh-cn/ossApple开源:http://www.apple.com/opensource/http://www.ope…

进程间通信(python)

Process之间肯定是需要通信的&#xff0c;操作系统提供了很多机制来实现进程间的通信。Python的multiprocessing模块包装了底层的机制&#xff0c;提供了Queue、Pipes等多种方式来交换数据。 一、我们以Queue为例&#xff0c;在父进程中创建两个子进程&#xff0c;一个往Queue…

80x86 CPU 的工作模式

8086/8088微处理器只有一种工作模式&#xff1a;实地址模式。 32为的80x86微处理器有3种工作模式&#xff1a;实地址模式、保护模式和虚拟8086模式。 实地址模式 对于8086/8088微处理器&#xff0c;实模式是它的唯一工作方式&#xff0c;对于80386以上的处理器来说&#xff0c;…

Python定时任务调度——APScheduler

参考&#xff1a; &#xff08;1&#xff09;https://www.cnblogs.com/luxiaojun/p/6567132.html &#xff08;2&#xff09;https://blog.csdn.net/u010376788/article/details/75726182

Ajax 模糊查询的简单实现

类似于百度的搜索引擎模糊查询功能&#xff0c;不过百度的模糊查询功能更强大&#xff0c;这里简单实现下. 要实现模糊查询&#xff0c;首先要做的就是把SQL写好。话不多少&#xff0c;直接贴代码了! JSP页面&#xff1a; <% page language"java" import"jav…

OpenStack组件

OpenStack的架构及组件&#xff08;Havana&#xff09; 服务项目名描述控制台Horizon用户通过该服务与OpenStack的各服务进行交互&#xff0c;如启动虚机实例、分配IP地址、设置访问控制等&#xff1b;计算Nova按需分派并管理虚机&#xff1b;网络Neutron通常是计算服务通过该服…

python 计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值

3. 统计数字 中文English 计算数字 k 在 0 到 n 中的出现的次数&#xff0c;k 可能是 0~9 的一个值。 Example 样例 1&#xff1a; 输入&#xff1a; k 1, n 1 输出&#xff1a; 1 解释&#xff1a; 在 [0, 1] 中&#xff0c;我们发现 1 出现了 1 次 (1)。样例 2&#x…

[转]Design Pattern Interview Questions - Part 2

Interpeter , Iterator , Mediator , Memento and Observer design patterns.(I) what is Interpreter pattern?(B) Can you explain iterator pattern?(A) Can you explain mediator pattern?(I) Can you explain memento pattern?(B) Can you explain observer pattern?…

python爬虫面试题

1 :列表生成式和生成器的区别 &#xff1f; 列表生成式直接生成一个列表&#xff0c;所有元素对象被立即创建在内存中&#xff0c;当元素过多时&#xff0c;势必会占用过多内存&#xff0c; 不可取&#xff0c;要用到生成器&#xff0c;它即时创建一个生成器对象&#xff0c;…

%hd %d %ld %u ......

%d 有符号10进制整数 %ld 长整型 %hd短整型%md,m指定的是输出字段的宽度&#xff0c;默认左补空格, 如果数据的位数小于m&#xff0c;则左端补以空格&#xff0c;若大于m&#xff0c;则  按实际位数输出&#xff0c;如&#xff1a;  printf("%4d,%4d",a,b)  若…

我的扑克牌

main.m文件&#xff1a; #import <Foundation/Foundation.h> #import "hearts.h" #import "spade.h" #import "wintersweet.h" #import "diamonds.h" #import "stdio.h" #import "string.h" int main(int a…