author:headsen chenpython
date::2018-04-10 09:56:54nginx
json模塊和pickle模塊:json
這是用於序列化的兩個模塊:網絡
概念介紹:
json和pickle模塊是將數據進行序列化處理,並進行網絡傳輸或存入硬盤。
json: 用於字符串和python數據類型間進行轉換(適用於python和其餘語言之間進行類型轉換)
pickle: 用於python特有的類型和python的數據類型間進行轉換函數
json:模塊提供了四個功能:dumps dump loads load
pickle:模塊提供了四個功能:dumps dump loads load spa
使用方法:
使用前先導入該模塊
import json
import pickleorm
總結區別:對象
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 k1q X 123q X k2q X helloq u. (只有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'} <class 'dict'>
{"k1": "123", "k2": "456"} <class 'str'>
{'k1': '123', 'k2': '456'} <class 'dict'>
例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'} <class 'dict'>
=======================================================================================================
例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)) # 從文件讀取並進行反序列化輸出