我們把對象(變量)從內存中變成可存儲或傳輸的過程稱之為序列化
json就是一種序列化的傳輸手段(json序列化的是字典類型的數據類型)

Python把一個字典序列化到一個文本文件中,使用json.dump或者dumps,如下:
import json dic={'name':'ljj','age':18} data=json.dumps(dic) f=open('json_text','w') f.write(data) f.close()
或者如下:
import json dic={'name':'ljj','age':18} f=open('json_text2','w') # data=json.dumps(dic) # f.write(data) json.dump(dic,f) f.close()
dump與dumps的區別就是dumps需要自己將序列化的字典write到文件中,而dump內部已經幫我們做了這一步
從文本文件中讀取,使用json.load或者loads,則如下:
import json f = open('json_text','r') data=f.read() data=json.loads(data) print(data['name'])
或者如下:
import json f = open('json_text2','r') # data=f.read() data=json.load(f) print(data['name'])
load與loads的區別就是loads需要自己將文件中的信息反序列化到內存中再read,而load內部已經幫我們做了這一步
pickle就是一種序列化的傳輸手段(pickle序列化的是函數和類)
序列化到文件中
import pickle def foo(): print('ok') data = pickle.dumps(foo) f = open('PICKLE_text','wb') f.write(data) f.close()
反序列化到內存里
import pickle def foo(): print('ok') f = open('PICKLE_text','rb') data = f.read() data=pickle.loads(data) data()#需要上面添加foo()函數才不會報錯,因為反序列化之后,foo的引用地址會找不到foo函數,需要重新加載
shelve模塊
shelve模塊比pickle模塊簡單,只有一個open函數,返回類似於字典的對象,可讀可寫:key必須為字符串,而值可以是python所支持的數據類型
import shelve f = shelve.open(r'SHELVE_text.txt') f['info'] = {'name':'ljj','age':18} f['shopping'] = {'name':'手機','price':1000} data = f.get('shopping') print(data)
