python序列化模块json和pickle
序列化相關(guān)
1. json
- 應(yīng)用場(chǎng)景:
json模塊主要用于處理json格式的數(shù)據(jù),可以將json格式的數(shù)據(jù)轉(zhuǎn)化為python的字典,便于python處理,同時(shí)也可以將python的字典或列表等對(duì)象轉(zhuǎn)化為json格式的數(shù)據(jù),便于跨平臺(tái)或跨語言進(jìn)行數(shù)據(jù)交互
-
功能:
-
Json模塊提供了四個(gè)功能:dumps、dump、loads、load
-
Python 編碼為 JSON 類型轉(zhuǎn)換對(duì)應(yīng)表:
PythonJSON dict object list, tuple array str string int, float, int- & float-derived Enums number| True true False false None null - JSON 解碼為 Python 類型轉(zhuǎn)換對(duì)應(yīng)表:
JSONPython object dict array list string str number (int) int number(real) float true True false False null None -
-
具體應(yīng)用
- dumps 和 loads 用于python對(duì)象和字符串間的序列化和反序列化
dumps:將python 基本數(shù)據(jù)類型轉(zhuǎn)化為json格式數(shù)據(jù)類型
#!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj import json s1 = '{"key1":"value1"}' #字符串只能是這個(gè)格式的,才能被json轉(zhuǎn)換 通過loads進(jìn)行反序列化時(shí),必須使用雙引號(hào) d1 = {'key2':'value2'} s2 = json.loads(s1) #使用loads反序列化 print('s1的內(nèi)容:',s1) print("s1的類型:",type(s1)) print('s2的內(nèi)容:',s2) print("s2的類型:",type(s2)) d2 = json.dumps(d1) print('d1的內(nèi)容:',d1) print("d1的類型:",type(d1)) print('d2的內(nèi)容:',d2) print("d2的類型",type(d2))
loads:將json格式數(shù)據(jù)類型轉(zhuǎn)化為python數(shù)據(jù)類型
輸出結(jié)果: s1的內(nèi)容: {"key1":"value1"} s1的類型: <class 'str'> s2的內(nèi)容: {'key1': 'value1'} s2的類型: <class 'dict'> #經(jīng)loads處理之后,str變味dict d1的內(nèi)容: {'key2': 'value2'} d1的類型: <class 'dict'> d2的內(nèi)容: {"key2": "value2"} d2的類型 <class 'str'> #經(jīng)dumps處理之后,dict變?yōu)閟tr?
- dump 和load 用于對(duì)文件進(jìn)行序列化和反序列化
dump:主要用于json文件的讀寫,json.dump(x,f),x是對(duì)象,f是一個(gè)文件對(duì)象,這個(gè)方法可以將json字符串寫入到文本文件中
``` #!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj import json s1 = '{"key1":"value1"}' #字符串只能是這個(gè)格式的,才能被json轉(zhuǎn)換 通過loads進(jìn)行反序列化時(shí),必須使用雙引號(hào) d1 = {'key2':'value2'} json.dump(d1,open('序列化.txt','w')) #將s1序列化,并寫入文件 e1 = json.load(open('序列化.txt','r')) #讀取json文件 print("e1的類型:",type(e1)) print('e1的內(nèi)容:',e1) ``` 輸出結(jié)果: e1的類型: <class 'dict'> e1的內(nèi)容: {'key2': 'value2'}
load:加載json文件?
2. pickle
- 應(yīng)用場(chǎng)景
pickle模塊實(shí)現(xiàn)了基本的數(shù)據(jù)序列和反序列化,和json的功能類似。
通過pickle模塊的序列化操作我們能夠?qū)⒊绦蛑羞\(yùn)行的對(duì)象信息保存到文件中去,永久存儲(chǔ),也可以簡單的將字符進(jìn)行序列化
通過pickle模塊的反序列化操作,我們能夠從文件中創(chuàng)建上一次程序保存的對(duì)象,也可以將字符進(jìn)行反序列化。和json不同的是:json 更適合跨語言 可以處理字符串,基本數(shù)據(jù)類型;pickle python專有,更適合處理復(fù)雜類型的序列化
-
功能
pikle模塊提供 dumps loads dump load四個(gè)基本功能 -
具體應(yīng)用
- dumps 和loads 用于python對(duì)象和字符串間的序列化和反序列化
dumps 和json.dumps功能一樣,但是以字節(jié)對(duì)象形式返回封裝的對(duì)象
#!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj import pickle s1 = '{"key1":"value1"}' #字符串只能是這個(gè)格式的,才能被json轉(zhuǎn)換 通過loads進(jìn)行反序列化時(shí),必須使用雙引號(hào) d1 = {'key2':'value2'} s3 = pickle.dumps(s1) print('s1的內(nèi)容:',s1) print("s1的類型:",type(s1)) print('s3的內(nèi)容:',s3) print("s3的類型:",type(s3)) d3 = pickle.loads(s3) print('d1的內(nèi)容:',d1) print("d1的類型:",type(d1)) print('d3的內(nèi)容:',d3) print("d3的類型",type(d3)) 輸出結(jié)果: s1的內(nèi)容: {"key1":"value1"} s1的類型: <class 'str'> s3的內(nèi)容: b'\x80\x03X\x11\x00\x00\x00{"key1":"value1"}q\x00.' s3的類型: <class 'bytes'> #dumps處理之后返回的是字節(jié)類型 d1的內(nèi)容: {'key2': 'value2'} d1的類型: <class 'dict'> d3的內(nèi)容: {"key1":"value1"} d3的類型 <class 'str'>
loads和json.loads功能一樣,從字節(jié)對(duì)象中讀取被封裝的對(duì)象,并返回?
-
dump 和load 用于對(duì)文件進(jìn)行序列化和反序列化.python數(shù)據(jù)持久化用的比較多
-
pickle.dump(obj, file, [,protocol])
注解:將對(duì)象obj保存到文件file中去。
protocol為序列化使用的協(xié)議版本,0:ASCII協(xié)議,所序列化的對(duì)象使用可打印的ASCII碼表示;1:老式的二進(jìn)制協(xié)議;2:2.3版本引入的新二進(jìn)制協(xié)議,較以前的更高效。其中協(xié)議0和1兼容老版本的python。protocol默認(rèn)值為0。
file:對(duì)象保存到的類文件對(duì)象。file必須有write()接口, file可以是一個(gè)以'w'方式打開的文件或者一個(gè)StringIO對(duì)象或者其他任何實(shí)現(xiàn)write()接口的對(duì)象。如果protocol>=1,文件對(duì)象需要是二進(jìn)制模式打開的。 -
pickle.load(file)
注解:從file中讀取一個(gè)字符串,并將它重構(gòu)為原來的python對(duì)象。
file:類文件對(duì)象,有read()和readline()接口
-
?
轉(zhuǎn)載于:https://www.cnblogs.com/fmgao-technology/p/9109617.html
總結(jié)
以上是生活随笔為你收集整理的python序列化模块json和pickle的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小程序分享朋友圈之填坑模式
- 下一篇: Let's Encrypt 免费SSL配