用于序列化的两个模块
- json,用于字符串 和 python数据类型间进行转换(python 内存中的数据对象,如列表、字典是不能直接写到文件中的,因为文件只能存bytes和字符串类型,所以json将内存中的数据类型转成字符串,存入文件,使用时再load。解决了不同语言、不同平台之间的数据交换。)
- pickle,用于python特有的类型 和 python的数据类型间进行转换(支持所有的python数据类型,两者用法完全一样)
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
dump 和load是对文件进行操作,
使用pickle读和写文件都必须使用二进制形式,rb,wb,
import pickle
with open('user','wb') as f:
pickle.dump('sdad',f)
import pickle
with open('user','rb') as f:
a = pickle.load(f)
print(a)
输出:sdad
dumps和loads对变量操作
import pickle a = [1,2,3,{1:2,'a':'b'}] b = pickle.dumps(a) print(b) c = pickle.loads(b) print(c) 输出: b'x80x03]qx00(Kx01Kx02Kx03}qx01(Kx01Kx02Xx01x00x00x00aqx02Xx01x00x00x00bqx03ue.' [1, 2, 3, {1: 2, 'a': 'b'}]
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
import shelve import datetime f = shelve.open('shelve_test') info = {'name':'xiaowang','age':'22'} date = datetime.datetime.now() num = [1,2,3,4,5] f['info'] = info f['date'] = date f['num'] = num f.close()
执行后,会在当前目录生成三个文件
然后使用这个文件
import shelve # import datetime f = shelve.open('shelve_test') print(f['info']) print(f['date']) print(f['num']) print('-----------------') for i ,j in f.items(): print(i,j)
输出:
{'age': '22', 'name': 'xiaowang'} 2017-06-05 00:05:48.809308 [1, 2, 3, 4, 5] ----------------- info {'age': '22', 'name': 'xiaowang'} date 2017-06-05 00:05:48.809308 num [1, 2, 3, 4, 5]
补充:shelve模块将python中的变量保存在二进制的shelfe文件中。在window上会创建三个文件,如上面,在OS X上只会创建一个.db文件 。
shelve模块打开文件不必指定读模式和写模式,打开文件后,既能读又能写,所以,可以改变文件中的变量值,并保存。
像字典一样,shelf值有keys()和value()方法,返回shelf中键和值的列表的值。因为这些方法返回类似列表的值,而不是真正的列表,所以应该将它们传递给list()函数,取得列表的形式。