python shelve模块_python常用模块之shelve模块
python常用模塊之shelve模塊
shelve模塊是一個(gè)簡(jiǎn)單的k,v將內(nèi)存中的數(shù)據(jù)通過(guò)文件持久化的模塊,可以持久化任何pickle可支持的python數(shù)據(jù)類(lèi)型
我們?cè)谏厦嬷vjson、pickle模塊的時(shí)候,說(shuō)過(guò)都不能dump都多次,那么是真的嗎?當(dāng)然不是的, shelve模塊就可以dump多次,shelve模塊其實(shí)就是封裝了pickle模塊,并且順序不會(huì)亂,因?yàn)閟helve模塊是k,v結(jié)構(gòu),給dump的數(shù)據(jù)指定一個(gè)名字,下次用這個(gè)名字就可以load回來(lái)。
序列化:
此模塊的操作在linux系統(tǒng)下講解
#!/usr/bin/python
import shelve
f = shelve.open("shelve_test") # 使用shelve模塊打開(kāi)一個(gè)文件
names = ["li","xiao","rain"]
info = {"name":"li","age":22}
f['names'] = names # 持久化列表
f['info_dir'] = info # 持久化字典
f.close()
shelve模塊的操作:
# 在linux系統(tǒng)下,ipython3
In [1]: import shelve
In [2]: f = shelve.open("shelve_test") # 此時(shí)的f就相當(dāng)于是一個(gè)文件對(duì)象,即可以像字典樣操作
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() # 是一個(gè)列表
In [6]: list(f.keys())
Out[6]: ['names', 'info_dir'] # 列表中存了兩個(gè)持久化的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() # 關(guān)閉文件
In [10]: f = shelve.open("shelve_test") # 重新打開(kāi)文件
In [12]: f.get('names') # 無(wú)任何輸出
# 增加
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']
# 修改,相當(dāng)于是重新賦值
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']) # 因?yàn)樵谥暗牟僮髦幸呀?jīng)刪除了這個(gè)
print(d['info_dir'])
d.close()
輸出結(jié)果為:
root@DESKTOP-G4V06P4:~/codes# python3 反序列化.py
{'age': 22, 'name': 'li'}
總結(jié)
以上是生活随笔為你收集整理的python shelve模块_python常用模块之shelve模块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mkdir 创建多级目录_linux中的
- 下一篇: python中lines是什么类型_py