Pickle
pickle中最主要的兩個函數(shù)對為dump()和load(),分別用來進行對象的序列化和反序列化。
pickle.dump(obj, file[, protocol]):序列化數(shù)據(jù)到一個文件描述符(一個打開的文件、套接字等)
load(file): 反序列化
import cPickle as pickle
mydata={}
fp=open{"picklefile","wb"}
pickle.dump(mydata,fp)
fp.close()
fp=open{"picklefile.dat","rb"}
out
- 通用性(linux-windows)
- 數(shù)據(jù)類型廣泛(可序列化的元組、字典、列表、非嵌套函數(shù)、類)
- 可拓展
- 維護對象引用關(guān)系
自用的pickle函數(shù)
import pickle, pprint
def pickle_save():#使用pickle模塊將數(shù)據(jù)對象保存到文件
contact = {'julius1':{'cellphone':'13800000000','tel':'0512-34343534','qq':'354564656'},
'julius2':{'cellphone':'13300000000','tel':'0513-34343534','qq':'454564656'},
'julius3':{'cellphone':'13400000000','tel':'0514-34343534','qq':'554564656'},
'julius4':{'cellphone':'13500000000','tel':'0515-34343534','qq':'654564656'}
}
f = open('contact_list.txt','w')
pickle.dump(contact,f)
f.close()
def pickle_load():#使用pickle從文件中重構(gòu)python對象
f = open('contact_list.txt','r')
contact = pickle.load(f)
pprint.pprint(contact)
pprint.pprint(contact['julius2'])#從dict中按要求取值
pprint.pprint(contact['julius3']['cellphone'])
pprint.pprint(contact['julius4']['qq'])
f.close()
pickle_save()
pickle_load()
https://blog.csdn.net/julius_lee/article/details/14163207
可能的錯誤:
ERROR:write() argument must be str, not bytes
SOLUTION:文件打開用二進制
f=open("list_account.pkl","w")改為
f=open("list_account.pkl","wb+")
Json
Json是文本的,輸出unicode,pickle是二進制的。
json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
# 序列化obj到fp
json.load(fp/s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
# 反序列化為obj
json.dumps([1, 2, 3, {'4': 5, '6': 7}],separators=(',', ':'))
>>>'[1,2,3,{"4":5,"6":7}]'
注意:
- fp必須支持.write 和str輸入