python序列化模块json和pickle
2017-07-14 08:22
1241 查看
1. json
应用场景:json模块主要用于处理json格式的数据,可以将json格式的数据转化为python的字典,便于python处理,同时也可以将python的字典或列表等对象转化为json格式的数据,便于跨平台或跨语言进行数据交互
功能:
Json模块提供了四个功能:dumps、dump、loads、load
Python 编码为 JSON 类型转换对应表:
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str | string |
int, float, int- & float-derived Enums | number| |
True | true |
False | false |
None | null |
JSON | Python |
---|---|
object | dict |
array | list |
string | str |
number (int) | int |
number(real) | float |
true | True |
false | False |
null | None |
dumps 和 loads 用于python对象和字符串间的序列化和反序列化
dumps:将python 基本数据类型转化为json格式数据类型
loads:将json格式数据类型转化为python数据类型
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#pyversion:python3.5
#owner:fuzj
import json
s1 = '[{"age": 22, "name": "alex"},{"age": 21, "name": "fly"}]' #字符串只能是这个格式的,才能被json转换 通过loads进行反序列化时,必须使用双引号
d1 = {'key2':'value2'}
# 使用loads反序列化
s2 = json.loads(s1) # 使用loads反序列化
print('s1的内容:',s1)
print("s1的类型:",type(s1))
print('s2的内容:',s2)
print("s2的类型:",type(s2))
d2 = json.dumps(d1)
print('d1的内容:',d1)
print("d1的类型:",type(d1))
print('d2的内容:',d2)
print("d2的类型",type(d2))
输出结果
s1的内容: [{"age": 22, "name": "alex"},{"age": 21, "name": "fly"}]
s1的类型: <class 'str'>
s2的内容: [{'age': 22, 'name': 'alex'}, {'age': 21, 'name': 'fly'}]
s2的类型: <class 'list'>
d1的内容: {'key2': 'value2'}
d1的类型: <class 'dict'>
d2的内容: {"key2": "value2"}
d2的类型 <class 'str'>
dump 和load 用于对文件进行序列化和反序列化
dump:主要用于json文件的读写,json.dump(x,f),x是对象,f是一个文件对象,这个方法可以将json字符串写入到文本文件中
load:加载json文件
import json
# s1 = '{"key1":"value1"}' #字符串只能是这个格式的,才能被json转换 通过loads进行反序列化时,必须使用双引号
d1 = {'key2':'value2'}
json.dump(d1,open('../序列化.txt','w')) #将s1序列化,并写入文件
e1 = json.load(open('../序列化.txt','r')) #读取json文件
print("d1的类型:",type(d1))
print("e1的类型:",type(e1))
print('e1的内容:',e1)
输出结果
d1的类型: <class 'dict'>
e1的类型: <class 'dict'>
e1的内容: {'key2': 'value2'}
2. pickle
应用场景pickle模块实现了基本的数据序列和反序列化,和json的功能类似。
通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储,也可以简单的将字符进行序列化
通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象,也可以将字符进行反序列化。和json不同的是:json 更适合跨语言 可以处理字符串,基本数据类型;pickle
python专有,更适合处理复杂类型的序列化
功能
pikle模块提供 dumps loads dump load四个基本功能
具体应用
dumps 和loads 用于python对象和字符串间的序列化和反序列化
dumps 和json.dumps功能一样,但是以字节对象形式返回封装的对象
loads和json.loads功能一样,从字节对象中读取被封装的对象,并返回
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#pyversion:python3.5
#owner:fuzj
import pickle
s1 = '{"key1":"value1"}' #字符串只能是这个格式的,才能被json转换 通过loads进行反序列化时,必须使用双引号
d1 = {'key2':'value2'}
s3 = pickle.dumps(s1)
print('s1的内容:',s1)
print("s1的类型:",type(s1))
print('s3的内容:',s3)
print("s3的类型:",type(s3))
d3 = pickle.loads(s3)
print('d1的内容:',d1)
print("d1的类型:",type(d1))
print('d3的内容:',d3)
print("d3的类型",type(d3))
输出结果
s1的内容: {"key1":"value1"}
s1的类型: <class 'str'>
s3的内容: b'\x80\x03X\x11\x00\x00\x00{"key1":"value1"}q\x00.'
s3的类型: <class 'bytes'>
d1的内容: {'key2': 'value2'}
d1的类型: <class 'dict'>
d3的内容: {"key1":"value1"}
d3的类型 <class 'str'>
dump 和load 用于对文件进行序列化和反序列化.python数据持久化用的比较多
pickle.dump(obj, file, [,protocol])
注解:将对象obj保存到文件file中去。
protocol为序列化使用的协议版本,0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;1:老式的二进制协议;2:2.3版本引入的新二进制协议,较以前的更高效。其中协议0和1兼容老版本的python。protocol默认值为0。
file:对象保存到的类文件对象。file必须有write()接口, file可以是一个以'w'方式打开的文件或者一个StringIO对象或者其他任何实现write()接口的对象。如果protocol>=1,文件对象需要是二进制模式打开的。
pickle.load(file)
注解:从file中读取一个字符串,并将它重构为原来的python对象。
file:类文件对象,有read()和readline()接口
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#pyversion:python3.5
#owner:fuzj
import json
import pickle
s1 = '{"key1":"value1"}' #字符串只能是这个格式的,才能被json转换 通过loads进行反序列化时,必须使用双引号
d1 = {'key2':'value2'}
pickle.dump(s1,open('序列化.txt','wb')) #注意需使用二进制方式写入文件
e2 = pickle.load(open('序列化.txt','rb')) #需使用二进制方式读取文件
print("e2的类型:",type(e2))
print('e2的内容:',e2)
输出结果
e2的类型: <class 'str'>
e2的内容: {"key1":"value1"}
来源: http://www.cnblogs.com/pycode/p/5575342.html
相关文章推荐
- python序列化 pickle,json模块
- python 序列化及其相关模块(json,pickle,shelve,xml)详解
- python 之序列化(pickle模块和json模块)
- python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)
- python学习之路(json & pickle 模块 ---序列化,反序列化)
- python常见模块之序列化(json与pickle以及shelve)
- Python模块:shutil、序列化(json&pickle&shelve)、xml
- Python--模块之sys模块、logging模块、序列化json模块、序列化pickle模块
- python全栈开发-json和pickle模块(数据的序列化)
- Python序列化模块json和pickle
- Python模块知识4:序列化Json/pickle
- python3----模块(序列化(json&pickle)+XML+requests)
- python序列化模块json和pickle
- Python基础(12)_python模块之sys模块、logging模块、序列化json模块、pickle模块、shelve模块
- python序列化pickle模块和json模块简单学习
- 模块(序列化(json&pickle)+XML+requests)
- Python 07 Pickle 与 Json 序列化
- 序列化的两个模块(json和pickle)
- 详解Python之数据序列化(json、pickle、shelve)
- Python之数据序列化(json、pickle、shelve)