70Python核心精要:json模块和pickle模块
Posted FinTech修行僧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了70Python核心精要:json模块和pickle模块相关的知识,希望对你有一定的参考价值。
Python核心精要:json模块和pickle模块
Python用于序列化的两个模块:json模块和pickle模块
持久性
持久性就是指保持对象,甚至在多次执行同一程序之间也保持对象。
持久性的思想
持久性的基本思想很简单。假定有一个 Python 程序,它可能是一个管理日常待办事项的程序,您希望在多次执行这个程序之间可以保存应用程序对象(待办事项)。换句话说,您希望将对象存储在磁盘上,便于以后检索。这就是持久性。
要达到这个目的,有几种方法,每一种方法都有其优缺点。
例如,可以将对象数据存储在某种格式的文本文件中,譬如 CSV 文件。或者可以用关系数据库,譬如 Gadfly、mysql、PostgreSQL 或者 DB2。这些文件格式和数据库都非常优秀,对于所有这些存储机制,Python 都有健壮的接口。
这些存储机制都有一个共同点:存储的数据是独立于对这些数据进行操作的对象和程序。
这样做的好处是,数据可以作为共享的资源,供其它应用程序使用。缺点是,用这种方式,可以允许其它程序访问对象的数据,这违背了面向对象的封装性原则 — 即对象的数据只能通过这个对象自身的公共(public)接口来访问。
另外,对于某些应用程序,关系数据库方法可能不是很理想。尤其是,关系数据库不理解对象。相反,关系数据库会强行使用自己的类型系统和关系数据模型(表),每张表包含一组元组(行),每行包含具有固定数目的静态类型字段(列)。如果应用程序的对象模型不能够方便地转换到关系模型,那么在将对象映射到元组以及将元组映射回对象方面,会碰到一定难度。这种困难常被称为阻碍性不匹配(impedence-mismatch)问题。
对象持久性
如果希望透明地存储 Python 对象,而不丢失其身份和类型等信息,则需要某种形式的对象序列化:它是一个将任意复杂的对象转成对象的文本或二进制表示的过程。同样,必须能够将对象经过序列化后的形式恢复到原有的对象。
在 Python 中,这种序列化过程称为 pickle,可以将对象 pickle 成字符串、磁盘上的文件或者任何类似于文件的对象,也可以将这些字符串、文件或任何类似于文件的对象 unpickle 成原来的对象。
序列化(Serialization)
将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON,XML等。
反序列化
就是从存储区域(JSON,XML)读取反序列化对象的状态,重新创建该对象。
JSON(Java Script Object Notation)
一种轻量级数据交互格式,相对于XML而言更简单,也易于阅读和编写,机器也方便解析和生成,Json是javascript中的一个子集。
python的json模块序列化与反序列化的过程分别是encoding和 decoding:
encoding:把一个python对象编码转换成Json字符串;
decoding:把json格式字符串解码转换成python对象;
json模块
json用于【字符串】和 【python基本数据类型】 间进行转换
json提供四个功能:dumps, dump, loads, load
(1)json.dumps(data)功能
将python对象通过特殊的形式转换为所有程序语言都认识的字符串,即json
(2)json.dump(data,f)功能
将python对象通过特殊的形式转换为所有程序语言都认识的字符串,即json,并写入文件,其中 f 是打开的文件对象
(3)json.loads(data)功能
将json编码的字符串再转换为python的数据对象
(4)json.load(f)功能
从数据文件中读取数据,并将json编码的字符串转换为python的数据对象
json编码支持的基本类型有:None, bool, int, float, string, list, tuple, dict
对于字典,json会假设key是字符串(字典中的任何非字符串key都会在编码时转换为字符串),要符合JSON规范,应该只对python列表和字典进行编码。此外,在WEB应用中,把最顶层对象定义为字典是一种标准做法。
json编码的格式几乎和python语法一致,略有不同的是:True会被映射为true,False会被映射为false,None会被映射为null,元组()会被映射为列表[],因为其他语言没有元组的概念,只有数组,也就是列表。
python 原始类型向 json 类型的转化对照表:
json 类型转换到 python 的类型对照表:
pickle模块
pickle用于【python特有的类型】和【python的数据类型】间进行转换
pickle提供四个功能:dumps,dump,loads,load
(1)pickle.dumps(data)
将数据通过特殊的形式转换为只有python语言认识的字符串
(2)pickle.dump(data,f)
将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
注意,这里用open函数时,其写入方式必须为wb,否则会报错。
(3)pickle.loads(data)
将pickle数据转换为python的数据结构
(4)pickle.load(f)
从数据文件中读取数据,并转换为python的数据结构
注意,这里用open函数时,读取方式必须为rb,否则会报错。
pickle可以存储什么类型的数据呢?
所有python支持的原生类型:布尔值,整数,浮点数,复数,字符串,字节,None。
由任何原生类型组成的列表,元组,字典和集合。
函数,类,类的实例
pickle的使用方式和json基本一样。
【1】http://www.runoob.com/python/python-json.html
【2】http://www.cnblogs.com/wang-yc/p/5616187.html
【3】http://www.cnblogs.com/wang-yc/p/5616579.html
【4】http://www.cnblogs.com/cobbliu/archive/2012/09/04/2670178.html
以上是关于70Python核心精要:json模块和pickle模块的主要内容,如果未能解决你的问题,请参考以下文章