json和pickle的功能是對數據進行序列化 將對象轉換為可通過網路傳輸或可以存儲到本地磁碟的數據格式(如:XML、JSON或特定格式的位元組串)的過程稱為序列化;反之,則稱為反序列化 json模塊 對於Python內置的數據類型(如:str, unicode, int, float, bool, ...
json和pickle的功能是對數據進行序列化
將對象轉換為可通過網路傳輸或可以存儲到本地磁碟的數據格式(如:XML、JSON或特定格式的位元組串)的過程稱為序列化;反之,則稱為反序列化
json模塊
對於Python內置的數據類型(如:str, unicode, int, float, bool, None, list, tuple, dict)json模塊可以直接進行序列化/反序列化處理
dumps和loads
import json list1=[1,2,3,"hello world"] data1=json.dumps(list1) print(data1)#[1, 2, 3, "hello world"] dict1={"one":1,"two":2,"three":3} data2=json.dumps(dict1) print(dict1)#{'one': 1, 'two': 2, 'three': 3} data1=json.loads(data1) print(data1)#[1, 2, 3, 'hello world'] data2=json.loads(data2) print(data2)#{'one': 1, 'two': 2, 'three': 3} print(data2["one"])#1
dump和load
這兩種方法可將序列化的數據存到文本和讀取文本中序列化的數據
list1=[1,2,3,"hello world"] with open("listfile","w") as f1: json.dump(list1,f1) with open("listfile","r") as f2: data=json.load(f2) print(data)
pickle模塊
python的pickle模塊實現了python的所有數據序列和反序列化。基本上功能使用和JSON模塊沒有太大區別,方法也同樣是dumps/dump和loads/load。
與JSON不同的是pickle不是用於多種語言間的數據傳輸,它僅作為python對象的持久化或者python程式間進行互相傳輸對象的方法,因此它支持了python所有的數據類型。
import pickle class people: def __init__(self,name,age): self.name=name self.age=age sfencs=people("sfencs",19) data=pickle.dumps(sfencs) print(data)
#b'\x80\x03c__main__\npeople\nq\x00)\x81q\x01}q\x02(X\x04\x00\x00\x00nameq\x03X\x06\x00\x00\x00sfencsq\x04X\x03\x00\x00\x00ageq\x05K\x13ub.' data=pickle.loads(data) print(data)#<__main__.people object at 0x0000029D8402DDA0>
pickle和json同樣支持dump,load,dumps,loads方法
shelve模塊
shelve是一個簡單的數據存儲方案,類似key-value資料庫,可以很方便的保存python對象,其內部是通過pickle協議來實現數據序列化。
其中key必須是字元串
import shelve with shelve.open("shelvefile") as f: f["one"]=1 f["two"]=2 #這裡直接保存到了文件中,生成了3個文件shelvefile.bak,shelvefile.dat,shelvefile.dir with shelve.open('shelvefile') as f:#只使用shelvefile名字即可 print(f["one"])#1 for key,value in f.items(): print(key, ': ', value) #one : 1 #two : 2
參考:https://www.cnblogs.com/yyds/p/6563608.html