json和pickle序列化+shelve模块

序列化:把内存中的变量变成可存储或传输的过程称之为序列化

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\nI1\naI2\naI3\na.'
>>> 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:\Users\AllenZhang>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

 

posted @ 2018-05-04 18:19  AllenZhang_(*^▽^*)  阅读(106)  评论(0编辑  收藏  举报