zoukankan      html  css  js  c++  java
  • python(6)- shelve模块

    前面学习了pickle,这两个可以将数据持久化存储到硬盘上,在实际应用中,我们可能会多次将数据dump到同一文件里,试一下:

    import pickle
    data = {'k1':123, 'k2':123}
    data1 = {'d1':111, 'd2':222}
    
    #先dump一次
    with open('data.pkl', 'wb') as f:
        pickle.dump(data, f)
    #使用追加模式再dump一次
    with open('data.pkl', 'ab') as f:
        pickle.dump(data1, f)
    
    #先读取一次
    with open('data.pkl', 'rb') as f:
        data_first = pickle.load(f)
    print(data_first)

    先执行一下,看看结果:

    {'k1': 123, 'k2': 123}

    将第一次dump的结果读取出来了。

    那我们再读取一次

    #先读取一次
    with open('data.pkl', 'rb') as f:
        data_first = pickle.load(f)
        data_second = pickle.load(f)
    print(data_first)
    print(data_second)

    执行结果

    {'k1': 123, 'k2': 123}
    {'d1': 111, 'd2': 222}

    由此可以得知,第一次读取的是第一次dump的数据,第二次读取的是第二次dump的数据,那第n次读取的就是第n次dump的数据. 那如果dump次数多了之后,根本就不可能知道,每次dump的内容是什么。而shelve 的作用就是让你知道你每次dump的是什么!

    import shelve
    
    f = shelve.open("shelve_test")
    
    class Test(object):
        def __init__(self, n):
            self.n = n
    
    #两个类的实例
    t = Test(123)
    t2 = Test(112233)
    #再定义一个列表
    name = ["alex", 'rain', 'jack']
    
    f["test"] = name   #持久化列表,'test'是我们给这次序列化取的名字,shelve内部实际上是key,vaule结构,test就是key
    f["t1"] = t     #持久化类
    f["t2"] = t2
    
    f.close()      #关闭
    
    
    #反序列化  也可以用with shelve.open 方式
    
    with shelve.open("shelve_test") as f:
        a = f['test']
        b = f['t1']
        c = f['t2']
    print(a)
    print(b.n)
    print(c.n)

    shelve内部是key, value结构,在每次序列化时定义一个名字(即key),这样我们就能方便的根据key来获取数据。

  • 相关阅读:
    Centos7部署Django
    CentOS7 常用命令
    window安装django-auth-ldap
    解决group by分组默认获取id最小的一条数据
    js基础之if判断
    java操作word转pdf多选框问题(linux服务器下)
    震惊,男默女泪,使用nginx代理,并进行ip拦截
    高德地图在marker里设置自定义属性
    angular项目启动错误
    本地连接虚拟机内的kafka遇到的问题
  • 原文地址:https://www.cnblogs.com/huangxm/p/5305832.html
Copyright © 2011-2022 走看看