author:headsen chen
date::2018-04-10 09:56:54
json模块和pickle模块:
这是用于序列化的两个模块:
概念介绍:
json和pickle模块是将数据进行序列化处理,并进行网络传输或存入硬盘。
json: 用于字符串和python数据类型间进行转换(适用于python和其他语言之间进行类型转换)
pickle: 用于python特有的类型和python的数据类型间进行转换
json:模块提供了四个功能:dumps dump loads load
pickle:模块提供了四个功能:dumps dump loads load
使用方法:
使用前先导入该模块
import json
import pickle
总结区别:
pickcle和json的使用只有一点不一样:pickle使用的rb和wb模式,json使用的r和w模式,其余使用方法上一样的。
........................功能上:pickle用于python内部各种数据类型的转换,json用于python和其他语言之间的数据类型的转换和交换。
........................使用范围上:pickle可以序列化所有的数据类型包括类、函数,json只能序列化最基本的数据类型。
python2可以dump多次,load多次,2个次数都是一一对应的
python3只能dump多次,loads、load一次
自己试验的实例:
pickle ==========================================================================
例1:pickle 内存对象的序列化(python3.0版本)
import pickle
d = {"k1":'123',"k2":'456'}
e = pickle.dumps(d)
print(e)
-----> 运行后生成了只有python才认识的特定的字符串
b'\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01X\x03\x00\x00\x00123q\x02X\x02\x00\x00\x00k2q\x03X\x03\x00\x00\x00456q\x04u.'
例2:pickle序列化在python2.0版本里:
#[root@nginx1 python]# python
Python 2.7.5 (default, Nov 6 2016, 00:28:07)
>>> import pickle
>>> d ={"k1": '123', "k2": "hello"}
>>> p_str = pickle.dumps(d)
>>> print( p_str)
(dp0
S'k2'
p1
S'hello'
p2
sS'k1'
p3
S'123'
p4
s.
>>>
例3:将已经生成的序列化的e,进行反转(反序列化)
import pickle
d = {"k1":'123',"k2":'456'}
e = pickle.dumps(d)
f = pickle.loads(e)
print(f)
----->
{'k1': '123', 'k2': '456'}
例4:将序列化后的数据写入到文件中
import pickle
d ={"k1": '123', "k2": "hello"}
with open('ss','wb') as jp:
pickle.dump(d,jp)
运行后自动生成序列化的ss文件:
打开ss文件:
�}q (X k1qX 123qX k2qX helloqu.(只有python才认识的某种类型文件)
将ss文件反转(反序列化操作)
例5:将上述ss文件进行反转(反序列化)
import pickle
with open('ss','rb') as jp: #同样读取的时候也需要打开文件
e=pickle.load(jp)
print(e)
---->
{'k1': '123', 'k2': 'hello'} -----------> 发现和上文的d一模一样
json ==================================================================================
json的序列化和反序列化:
例6:内存对象的序列化和反序列化:
import json
d = {"k1":'123',"k2":'456'}
e = json.dumps(d)
f = json.loads(e)
print(d,type(d))
print(e,type(e))
print(f,type(f))
------->
{'k1': '123', 'k2': '456'}
{"k1": "123", "k2": "456"}
{'k1': '123', 'k2': '456'}
例7:文件的序列化和反序列化:
import json
d = {"k1":'123',"k2":'456'}
with open('kk','w') as jp:
json.dump(d,jp)
运行后生成kk 的文件,文件内容:
{"k1": "123", "k2": "456"}
将生成的kk文件进行反序列化:
import json
with open('kk','r') as jp: #同样读取的时候也需要打开文件
d=json.load(jp)
print(d,type(d))
------>
{'k1': '123', 'k2': '456'}
=======================================================================================================
例8:json模块总体的总结:
JSON在python中分别由list和dict组成。
import json
s={1:1,2:2,3:3}
sjson=json.dumps(s) # 将s进行序列化
s1=json.loads(sjson) # 将sjson进行反序列化
with open(filename,format)as f:
json.dump(s,f) # 将s进行序列化并存入文件中
with open(filename)as f:
for line in f.readlines():
print(json.loads(line)) # 从文件读取并进行反序列化输出