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

    #coding:utf-8
    __author__ = 'similarface'
    #email:similarface@outlook.com
    '''
    shelve模块:
    映射容器
    存储对象,被存储的对象都会被序列化并且被写入文件
    反序列化然后从文件获取任意对象
    
    method:shelve.open()
    'r'	Open existing database for reading only (default)
    'w'	Open existing database for reading and writing
    'c'	Open database for reading and writing, creating it if it doesn’t exist
    'n'	Always create a new, empty database, open for reading and writing
    '''
    import shelve
    import logging
    logging.basicConfig(level=logging.DEBUG)
    console = logging.StreamHandler()
    logging.getLogger('').addHandler(console)
    class Person:
        '''
        定义个简单的类
        '''
        def __init__(self,name,*posts):
            self.name=name
    
        def as_dict(self):
            return dict(name=self.name,underline="="*len(self.name),)
    
    p1=Person(name='Tom')
    #创建shelf对象
    shelf=shelve.open('person')
    #设置键
    p1._id='person:1'
    #存储
    shelf[p1._id]=p1
    
    #获取
    p=shelf[p1._id]
    logging.info(p)
    logging.info(p.name)
    logging.info(p._id)
    logging.info(list(shelf.keys()))
    shelf.close()
    #获取存储对象
    shelf=shelve.open('person')
    #获取指定的对象 根据类和属性来获取
    results=(shelf[k] for k in shelf.keys() if k.startswith('person:') and shelf[k].name=='Tom' )
    #logging.info(list(results))
    for i in results:
        r0=i
        logging.info(r0._id)
        logging.info(r0.name)
    
    '''
    INFO:root:<__main__.Person instance at 0x00000000026DBAC8>
    <__main__.Person instance at 0x00000000026DBAC8>
    INFO:root:Tom
    Tom
    INFO:root:person:1
    person:1
    INFO:root:['person:1']
    ['person:1']
    INFO:root:person:1
    person:1
    INFO:root:Tom
    Tom
    '''
    
    
    '''
    存在继承的对象的持久化
    使用外键引用对象
    '''
    
    
    
    import datetime
    class Teacher:
        def __init__(self,profession,name,desc,tags):
            self.profession=profession
            self.name=name
            self.desc=desc
            self.tags=tags
    
        def as_dict(self):
            return dict(
                profession=self.profession,
                name=self.name,
                underline="-"*len(self.name),
                desc=self.desc,
                tags=" ".join(self.tags)
            )
    
    t1=Teacher('math','Lucy','beauifu teacher',['senior'])
    t2=Teacher('english','Tom','Stronger',['lower'])
    
    import shelve
    shelf=shelve.open('person')
    owner=shelf['person:1']
    t1._parent=owner._id
    t1._id=t1._parent+':teacher:1'
    shelf[t1._id]=t1
    
    t2._parent=owner._id
    t2._id=t2._parent+':teachar:2'
    shelf[t2._id]=t2
    
    logging.info(list(shelf.keys()))
    logging.info(t1._parent)
    logging.info(t2._id)
    
    '''
    INFO:root:['person:1:teachar:2', 'person:1', 'person:1:teacher:1']
    ['person:1:teachar:2', 'person:1', 'person:1:teacher:1']
    INFO:root:person:1
    person:1
    INFO:root:person:1:teachar:2
    person:1:teachar:2
    '''
    

      

  • 相关阅读:
    JS中使用正则表达式封装的一些常用的格式验证的方法-是否外部url、是否小写、邮箱格式、是否字符、是否数组
    Java中操作字符串的工具类-判空、截取、格式化、转换驼峰、转集合和list、是否包含
    Cocos2d-x 2.0 自适应多种分辨率
    应用自定义移动设备外观
    为移动设备应用程序创建外观
    【2020-11-28】人生十三信条
    【2020-11-27】事实证明,逃避是下等策略
    Python 之web动态服务器
    Python 之pygame飞机游戏
    PHP 之转换excel表格中的经纬度
  • 原文地址:https://www.cnblogs.com/similarface/p/5573195.html
Copyright © 2011-2022 走看看