zoukankan      html  css  js  c++  java
  • shelve模块

    一、简介

      在python3中我们使用json或者pickle持久化数据,能dump多次,但只能load一次,因为先前的数据已经被后面dump的数据覆盖掉了。如果我们想要实现dump和load多次,可以使用shelve模块。shelve模块可以持久化所有pickle所支持的数据类型。

    二、持久化数据

    1、数据持久化

    import shelve
    import datetime
    
    info = {'name': 'bigberg', 'age': 22}
    name = ['Apoll', 'Zous', 'Luna']
    t = datetime.datetime.now()
    
    with shelve.open('shelve.txt') as f:
        f['name'] = name    # 持久化列表
        f['info'] = info         # 持久化字典 
        f['time'] = t            # 持久化时间类型
    

      

    执行代码后会生成3个文件:shelve.txt.bak、shelve.txt.dat、shelve.txt.dir。

    • shelve.txt.bak 的内容
    'info', (512, 45)
    'name', (0, 42)
    'time', (1024, 44)
    
    • shelve.txt.dat  
    �]q (X   ApollqX   ZousqX   Lunaqe.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      �}q (X   ageqKX   nameqX   bigbergqu.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   �cdatetime
    datetime
    q C
    �"
    2�q�qRq.
    
    • shelve.txt.dir 的内容
    'info', (512, 45)
    'name', (0, 42)
    'time', (1024, 44)
    

      

    2、数据读取

    我们使用get来获取数据

    import shelve
    
    with shelve.open('shelve.txt') as f:
        n = f.get('name')
        i = f.get('info')
        now = f.get('time')
    
    print(n)
    print(i)
    print(now)
    
    #输出
    
    ['Apoll', 'Zous', 'Luna']
    {'age': 22, 'name': 'bigberg'}
    2017-07-08 11:07:34.865022
    

    1、shelve模块是一个简单的key,value将内存数据通过文件持久化的模块。

    2、shelve模块可以持久化任何pickle可支持的python数据格式。

    3、shelve就是pickle模块的一个封装。

    4、shelve模块是可以多次dump和load。

  • 相关阅读:
    bzoj1066: [SCOI2007]蜥蜴
    bzoj3504: [Cqoi2014]危桥
    bzoj2756: [SCOI2012]奇怪的游戏
    bzoj1570: [JSOI2008]Blue Mary的旅行
    Ultra-QuickSort
    Bin Packing
    Watering Grass
    区间覆盖
    抄书 Copying Books UVa 714
    分馅饼 Pie
  • 原文地址:https://www.cnblogs.com/bigberg/p/7136212.html
Copyright © 2011-2022 走看看