python学习-pickle、json和shelve模块

用于序列化的两个模块

  • 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()函数,取得列表的形式。

原文地址:https://www.cnblogs.com/cq90/p/6886649.html