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'}
    
  • 相关阅读:
    Oracle 安装报错 [INS-06101] IP address of localhost could not be determined 解决方法输入日志标题
    Linux下安装oracle数据库提示DISPLAY not set. Please set the DISPLAY and try again。
    redhat 关机注销命令详解
    VirtualBox的四种网络连接方式
    修改RedHat的系统显示时间
    insufficient memory to configure kdump(没有足够的内存)解决方法(待验证、待解决)
    xen坑随笔 heartbeat dpkg垃圾数据库清除
    tomcat 监控脚本
    负载均衡随笔
    GIT命令介绍
  • 原文地址:https://www.cnblogs.com/xiaoyafei/p/9037195.html
Copyright © 2011-2022 走看看