Python序列化與反序列化-json與pickle
阿新 • • 發佈:2018-03-09
day 存儲 什麽 pychar odi 兩個 對象 .cn 序列化
Python序列化與反序列化-json與pickle
作者:尹正傑
版權聲明:原創作品,謝絕轉載!否則將追究法律責任。
一.json的序列化方式與反序列化方式
1>.json序列化
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/5 #EMAIL:[email protected] 6 7 8 """ 9 一.什麽是序列化: 10 我們把對象(變量)從內存中變成可存儲或傳輸的過程稱之為序列化,在Python中叫做picking,在其他語言中也被 11 稱之為serialization,marshalling,flattening等等,都是一個意思。序列化之後,就可以把序列化後的內容寫入磁盤, 12 或者通過網絡傳輸到別的機器上,反過來,把變量從內容從序列化的對象重新督導內存裏稱之為反序列化,即unpicking。 13 14 二.序列化與編碼的關系 15 序列化是在編碼之前進行的操作。序列化是將各種數據類型統一處理為字符串,在序列化完成之後需要指定這些16 字符串以何種方式(如,utf-8,gbk等等)存入硬盤喲!當然在反序列化一個文件的內容是,首先做的操作是解碼, 17 也就是以哪種方式打開文件,如果編碼格式打開正常就會獲取到正確的字符串,這樣就可以進行反序列化操作啦。 18 19 三.json模塊 20 如果我們要在不同的編程語言之間傳遞對象,就必須把對象序列化為標準格式,比如XML,但更好的辦法就是序列化為json, 21 因為json表示出來就是一個字符串,可以被所有語言讀取,也可以方便的存儲到磁盤或者通過網絡傳輸。json不僅是標準格式, 22 並且比XML更快,而且可以直接在web頁面中讀取,非常方便。 23 24 """25 26 import json 27 28 accounts = { 29 "Name":"yinzhengjie", 30 "id": "210", 31 "banlance": "20000", 32 } 33 34 #序列化方式一: 35 # f = open(r"E:\Code\pycharm\文件存放處\python學習筆記\Day11\yinzhengjie.txt","w") #打開文件 36 # 37 # json_str = json.dumps(accounts) #序列化操作 38 # 39 # f.write(json_str) #寫入文件 40 41 #序列化方式二: 42 with open(r"E:\Code\pycharm\文件存放處\python學習筆記\Day11\yinzhengjie.txt","w")as f: 43 json.dump(accounts,f)
1 {"Name": "yinzhengjie", "id": "210", "banlance": "20000"}yinzhengjie.txt文件內容
2>.反序列化方式
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 import json 8 9 with open(r"E:\Code\pycharm\文件存放處\python學習筆記\Day11\yinzhengjie.txt")as f: 10 print(json.load(f))
二.pickle序列化與反序列化
1>.序列化方式
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 import pickle 8 9 ‘‘‘ 10 pickle: 11 1.>用於python特有的類型 和 python的數據類型間進行轉換 12 2.>pickle模塊提供了四個功能:dumps、dump、loads、load. 13 補充說明:將數據通過特殊的形式轉換成只有python解釋器識別的字符串,這個過程我們叫做序列化,而把哪些python能夠識別的字符串轉換成我們能看懂的叫做反序列化。 14 ‘‘‘ 15 16 17 DataInfo = { 18 "Name":"尹正傑", 19 "Password":"123" 20 } 21 22 23 24 # #將數據通過特殊的形式轉換為只有python語言知識的字符串並寫入文件 25 # pickle_str = pickle.dumps(DataInfo) 26 # print(pickle_str) 27 # f = open("yinzhengjie.txt","wb") 28 # f.write(pickle_str) 29 30 #上面的寫入文件的方法也可以這麽玩,看起來更簡單 31 with open("yinzhengjie.txt","wb") as f: 32 pickle.dump(DataInfo,f)
2.反序列化方式
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 import pickle 8 9 ‘‘‘ 10 用於序列化的兩個模塊 11 1>.json:用於字符串 和 python數據類型間進行轉換 12 2>.pickle:用於python特有的類型和python的數據類型間進行轉換 13 json模塊提供了四個功能:dumps、dump、loads、load 14 pickle模塊提供了四個功能:dumps、dump、loads、load 15 ‘‘‘ 16 17 18 f = open("yinzhengjie.txt","rb") 19 20 # print(pickle.loads(f.read())) #loads方式反序列化 21 22 print(pickle.load(f)) #load方式反序列化
三.對比json和pickle的異同:
1>.相同點:都是用於系列化和反序列化的模塊。
2>.不同點:json是在所有語言都通用的數據存儲格式,而pickle是僅僅只有python語言獨有的存儲格式。
Python序列化與反序列化-json與pickle