• 持久化-pickle和shelve


    序列化:数据转成文本的过程被称为“序列化”,即将对象状态转换为可保持或传输的格式的过程
    反序列化:对应的,从序列化的格式中解析对象状态的过程被称为“反序列化”

    pickle的使用方法:

    - 需要导入pickle包

    - pickle.dump()   #将数据写入到文件中

    - pickle.load()  #将数据从文件中读出

    - 文件中的内容要求是列表或元组

    import pickle
    
    test_data = ["save me", 123, 456, True]
    f1 = open(r".vscodeproject	est.txt", "wb")
    pickle.dump(test_data, f1)  #存储文件中的数据
    f1.close()
    
    f2 = open(r".vscodeproject	est.txt", 'rb')  #文件内容必须为pickle能够识别的
    test_data = pickle.load(f2)
    f2.close()
    print(test_data)  #读取文件中的数据

    shelve的使用方法:

    - 类似于字典,用kv对保存数据,存取方式跟字典也类似,也可以像字典一样使用get来获取数据

    - shelve.open和shelve.close()

    - 和读写操作一样,打开后必须关闭

    为什么在有json和pickle的情况下还要使用shelve:

    使用json或者pickle持久化数据,能dump多次,但load的话只能取到最新的dump,因为先前的数据已经被后面dump的数据覆盖掉了,如果想要实现dump多次不被覆盖,就可以想到使用shelve模块,另外,写程序的时候如果不想用关系数据库那么重量级的操作去存储数据,也可以用到shelve。shelve模块可以持久化所有pickle所支持的数据类型。

    import shelve
    
    #如果系统中没有该文件则自动创建一个
    shv = shelve.open(r'shv.db')
    
    shv['one'] = 1
    shv['two'] = 2
    shv['three'] = 3
    
    shv.close()
    
    shv = shelve.open(r'shv.db')
    
    try:
        print(shv['one'])
        print(shv['four'])
    except Exception as e:
        print("找不到该key")
    finally:
        shv.close()
    
    #1
    #找不到该key



  • 相关阅读:
    Windows Server 2012配置开机启动项
    Windows Server 2019 SSH Server
    NOIP2017 senior A 模拟赛 7.7 T1 棋盘
    Noip 2015 senior 复赛 Day2 子串
    Noip 2015 senior复赛 题解
    Noip 2014 senior Day2 解方程(equation)
    Noip 2014 senior Day2 寻找道路(road)
    Noip 2014 senior Day2 无线网络发射器选址(wireless)
    Noip2014senior复赛 飞扬的小鸟
    Noip 2014 senior 复赛 联合权值(link)
  • 原文地址:https://www.cnblogs.com/wjw2018/p/10540287.html
Copyright © 2020-2023  润新知