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

    shelve是一个简单的数据存储方案,类似key-value数据库,可以很方便的保存python对象,其内部是通过pickle协议来实现数据序列化。shelve只有一个open()函数,这个函数用于打开指定的文件(一个持久的字典),然后返回一个shelf对象。shelf是一种持久的、类似字典的对象。它与“dbm”的不同之处在于,其values值可以是任意基本Python对象--pickle模块可以处理的任何数据。这包括大多数类实例、递归数据类型和包含很多共享子对象的对象。keys还是普通的字符串。

    open(filename, flag='c', protocol=None, writeback=False)

    'r':以只读模式打开一个已经存在的数据存储文件

    'w':以读写模式打开一个已经存在的数据存储文件

    'c':以读写模式打开一个数据存储文件,如果不存在则创建

    'n':总是创建一个新的、空数据存储文件,并以读写模式打开

    protocol 参数表示序列化数据所使用的协议版本,默认是pickle v3;

    writeback 参数表示是否开启回写功能

    实例:内置数据类型操作

    # 保存数据
    with shelve.open('student') as db:
        db['name'] = 'Tom'
        db['age'] = 19
        db['hobby'] = ['篮球', '看电影', '弹吉他']
        db['other_info'] = {'sno': 1, 'addr': 'xxxx'}
    
    # 读取数据
    with shelve.open('student') as db:
        for key,value in db.items():
            print(key, ': ', value)

    实例:自定义数据类型操作

    # 自定义class
    class Student(object):
        def __init__(self, name, age, sno):
            self.name = name
            self.age = age
            self.sno = sno
        
        def __repr__(self):
            return 'Student [name: %s, age: %d, sno: %d]' % (self.name, self.age, self.sno)
    
    # 保存数据
    tom = Student('Tom', 19, 1)
    jerry = Student('Jerry', 17, 2)
    
    with shelve.open("stu.db") as db:
        db['Tom'] = tom
        db['Jerry'] = jerry
    
    # 读取数据
    with shelve.open("stu.db") as db:
        print(db['Tom'])
        print(db['Jerry'])
    import shelve
    f = shelve.open("shelve_test.db")
    f.update({'k1':'v1','k2':'v2'})
    f['k3'] = "v3"
    for i in f.keys():
        print(i)
    f.close()

    输出:

    k1
    k3
    k2


  • 相关阅读:
    软件工程专业必须要会的算法
    软工实践寒假作业(1/2)
    我的思维导图
    个人简历
    当初希望自己是如何投入这个专业的学习的?曾经做过什么准备,或者立下过什么FLAG吗?
    当初对"软件工程"这个专业的期待和想象是什么?
    洛谷 题解 P1736 【创意吃鱼法】
    2018NOIP赛后总结+后阶段信奥学习个人规划
    洛谷 题解 P5015 【标题统计】 NOIP2018 普及组 T1
    NOIp考前注意事项
  • 原文地址:https://www.cnblogs.com/wenwei-blog/p/7737192.html
Copyright © 2011-2022 走看看