python shelve模块_python常用模块之shelve模块

python常用模块之shelve模块

shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型

我们在上面讲json、pickle模块的时候,说过都不能dump都多次,那么是真的吗?当然不是的, shelve模块就可以dump多次,shelve模块其实就是封装了pickle模块,并且顺序不会乱,因为shelve模块是k,v结构,给dump的数据指定一个名字,下次用这个名字就可以load回来。

序列化:

此模块的操作在linux系统下讲解

#!/usr/bin/python

import shelve

f = shelve.open("shelve_test") # 使用shelve模块打开一个文件

names = ["li","xiao","rain"]

info = {"name":"li","age":22}

f['names'] = names # 持久化列表

f['info_dir'] = info # 持久化字典

f.close()

shelve模块的操作:

# 在linux系统下,ipython3

In [1]: import shelve

In [2]: f = shelve.open("shelve_test") # 此时的f就相当于是一个文件对象,即可以像字典样操作

In [3]: f.get('names')

Out[3]: ['li', 'xiao', 'rain']

In [4]: f.get('info_dir')

Out[4]: {'name': 'li', 'age': 22}

In [5]: f.keys()

Out[5]: KeysView() # 是一个列表

In [6]: list(f.keys())

Out[6]: ['names', 'info_dir'] # 列表中存了两个持久化的k

In [7]: list(f.items())

Out[7]: [('names', ['li', 'xiao', 'rain']), ('info_dir', {'name': 'li', 'age': 22})]

# 删除

In [8]: del f['names'] # 删除持久化的k

In [9]: f.close() # 关闭文件

In [10]: f = shelve.open("shelve_test") # 重新打开文件

In [12]: f.get('names') # 无任何输出

# 增加

In [13]: f['scores'] = [1,2,3,4,"rain"] #

In [14]: f.close()

In [15]: f = shelve.open("shelve_test")

In [16]: f.get('scores')

Out[16]: [1, 2, 3, 4, 'rain']

# 修改,相当于是重新赋值

In [17]: f['scores']

Out[17]: [1, 2, 3, 4, 'rain']

In [18]: f['scores'] = [1,2,3,4,5]

In [19]: f.close()

In [20]: f = shelve.open("shelve_test")

In [24]: f['scores']

Out[24]: [1, 2, 3, 4, 5]

反序列化:

#!/usr/bin/python

import shelve

d = shelve.open('shelve_test')

# print(d['names']) # 因为在之前的操作中已经删除了这个

print(d['info_dir'])

d.close()

输出结果为:

root@DESKTOP-G4V06P4:~/codes# python3 反序列化.py

{'age': 22, 'name': 'li'}

你可能感兴趣的:(python,shelve模块)