python3模块: json & pickle

概念:

序列化(Serialization):

  • 将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON,XML等。反序列化就是从存储区域(JSON,XML)读取反序列化对象的状态,重新创建该对象。
  • JSON(Java Script Object Notation):一种轻量级数据交互格式,相对于XML而言更简单,也易于阅读和编写,机器也方便解析和生成,Json是JavaScript中的一个子集。
  • python2.6版本开始加入了JSON模块,python的json模块序列化与反序列化的过程分别是encoding和decoding。 encoding:把一个python对象编码转换成Json字符串。 decoding:把json格式字符串编码转换成python对象。

用于序列化的两个模块

  • json:用于字符串和Python数据类型间进行转换
  • pickle: 用于python特有的类型和python的数据类型间进行转换
  • json提供四个功能:dumps,dump,loads,load
  • pickle提供四个功能:dumps,dump,loads,load 具体应用:

json提供四个功能:dumps, dump, loads, load

1 # dumps功能
2 # 将数据通过特殊的形式转换为所有程序语言都认识的字符串
3 >>> import json
4 >>> data = ['aa', 'bb', 'cc']
5 >>> j_str = json.dumps(data)
6 >>> j_str
7 '["aa", "bb", "cc"]'
1 # loads功能
2 # 将json编码的字符串再转换为python的数据结构
3 >>> j_str
4 '["aa", "bb", "cc"]'
5 >>> mes = json.loads(j_str)
6 >>> mes
7 ['aa', 'bb', 'cc']
1 # dump功能
2 # 将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件
3 with open('D:/tmp.json', 'w') as f:
4     json.dump(data, f)
1 # load功能
2 # 从数据文件中读取数据,并将json编码的字符串转换为python的数据结构
3 with open('D:/tmp.json', 'r') as f:
4     data = json.load(f)

说明:

  json编码支持的基本类型有:None, bool, int, float, string, list, tuple, dict.

  对于字典,json会假设key是字符串(字典中的任何非字符串key都会在编码时转换为字符串),要符合JSON规范,应该只对python列表和字典进行编码。此外,在WEB应用中,把最顶层对象定义为字典是一种标准做法。

  json编码的格式几乎和python语法一致,略有不同的是:True会被映射为true,False会被映射为false,None会被映射为null,元组()会被映射为列表[],因为其他语言没有元组的概念,只有数组,也就是列表。

1 >>> import json
2 >>> data = {'a':True, 'b':False, 'c':None, 'd':(1,2), 1:'abc'}
3 >>> j_str = json.dumps(data)
4 >>> j_str
5 '{"a": true, "c": null, "d": [1, 2], "b": false, "1": "abc"}'

pickle可以存储什么类型的数据呢?

  1. 所有python支持的原生类型:布尔值,整数,浮点数,复数,字符串,字节,None。
  2. 由任何原生类型组成的列表,元组,字典和集合。
  3. 函数,类,类的实例

pickle应用:

1 # dumps功能
2 import pickle
3 data = ['aa', 'bb', 'cc']  
4 # dumps 将数据通过特殊的形式转换为只有python语言认识的字符串
5 p_str = pickle.dumps(data)
6 print(p_str)            
b'\x80\x03]q\x00(X\x02\x00\x00\x00aaq\x01X\x02\x00\x00\x00bbq\x02X\x02\x00\x00\x00ccq\x03e.         
b'\x80\x03]q\x00(X\x02\x00\x00\x00aaq\x01X\x02\x00\x00\x00bbq\x02X\x02\x00\x00\x00ccq\x03e.

1 # loads功能
2 # loads  将pickle数据转换为python的数据结构
3 mes = pickle.loads(p_str)
4 print(mes)
5 ['aa', 'bb', 'cc']

1 # dump功能
2 # dump 将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
3 with open('D:/tmp.pk', 'w') as f:
4     pickle.dump(data, f)
1 # load功能
2 # load 从数据文件中读取数据,并转换为python的数据结构
3 with open('D:/tmp.pk', 'r') as f:
4     data = pickle.load(f)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开源优测

python selenium2 - webelement操作常用方法

完整路径 C:\Python27\Lib\site-packages\selenium\webdriver\remote\webelement...

2925
来自专栏不想当开发的产品不是好测试

java匿名内部类

show the code : package com.test.jwen.httpApiAuto; public class AInter { publ...

2087
来自专栏kalifaの日々

C语言中static,const和static const 的区别

在第一次调用test()时,如果static int b没有被我赋初值,也会被默认赋值成0。然后执行自增运算,所以输出1。第二次调用test()时如果是普通的变...

631
来自专栏ml

hdu 3518 (后缀数组)

  题目描述:   找出一个字符串中至少重复出现两次的字串的个数(重复出现时不能重叠)。   code:      后缀数组处理,对于得到height 进行查找...

3234
来自专栏Jerry的SAP技术分享

使用javap深入理解Java整型常量和整型变量的区别

下面我们就用javap将.class文件反编译出来然后深入研究Java里整型变量和整型常量的区别。

1263
来自专栏小灰灰

Shell学习笔记

1. 变量 声明变量 以 a-zA-Z 开头,不包含特殊字符 等号两边没有空格 不与保留字符重名 PATH="/user/yihui" 使用 变量前加 $ 符号...

18810
来自专栏机器学习从入门到成神

JavaScript之函数定义以及类型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

932
来自专栏WD学习记录

html5学习笔记(二)

1. min、max、step属性用于包含数字或日期的input类型规定限定(约束)。

631
来自专栏Python小屋

奇怪,Python有的函数调用需要两对括号?(2)

在Python中,允许嵌套定义函数,也就是在一个函数A中可以定义另一个函数B。另外,在Python中,可调用对象可以分为三类:1)函数,2)类,3)含有特殊方法...

3139
来自专栏一名合格java开发的自我修养

Linux之shell编程条件判断-if,while,for,case

原文和作者一起讨论:http://www.cnblogs.com/intsmaze/p/6675350.html

1053

扫码关注云+社区