zoukankan      html  css  js  c++  java
  • 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(<shelve.DbfilenameShelf object at 0x7f6a43269198>)  # 是一个列表
    
    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'}
    
  • 相关阅读:
    安装Eclipse for MAC 苹果版
    visual studio code emmet 插件不提示?解决方案
    支付宝付款页面调整屏幕亮度
    浅谈iOS需要掌握的技术点
    Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译)
    ios开发数据库版本迁移手动更新迭代和自动更新迭代艺术(-)
    ios 添加到cell 上的button点击无效!扩大button的点击区域(黑魔法)
    个人中心模块-拍照剪裁上传
    利用js与java交互
    显示gif动画(帧动画的播放)
  • 原文地址:https://www.cnblogs.com/xiaoyafei/p/9037195.html
Copyright © 2011-2022 走看看