序列化:把内存中的变量变成可存储或传输的过程称之为序列化。
json序列化和pickle序列化大致都差不多,差异有:
json可以反序列化各种语言用json序列化之后的内容,而pickle只能反序列化python用pickle序列化之后的内容;
序列化一般都是序列化成字符串格式,而python3中的pickle序列化是转成二进制的格式。
dumps 序列化
loads 反序列化
>>> import json, pickle >>> a = [1,2,3] >>> b = json.dumps(a) >>> b '[1, 2, 3]' >>> c = pickle.dumps(a) >>> c '(lp0 I1 aI2 aI3 a.'
>>> json.loads(b) [1, 2, 3] >>> pickle.loads(c) [1, 2, 3]
dump 序列化(把内容放到文件里)
load 反序列化(加载文件里的内容)
>>> a = {'today': '星期六', 'mood': 'good'} >>> import json >>> json.dump(a, open('new.txt', 'w')) # pickle同理
>>> b = json.load(open('new.txt')) # pickle同理 >>> b {'today': '星期六', 'mood': 'good'}
shelve模块(对pickle更上一层的封装)是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式。
>>> import shelve >>> s = shelve.open('today') >>> a = [1, 2, 3, 4, 5] >>> b = 666 >>> s['a'] = a # 存 >>> s['b'] = b >>> s.close() >>> s <shelve.DbfilenameShelf object at 0x000001DF540A6390> >>> ^C C:UsersAllenZhang>py -3 Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import shelve >>> s = shelve.open('today') >>> s.get('a') # 读 [1, 2, 3, 4, 5] >>> s.get('b') 666