shelve模块

#coding:utf-8
__author__ = ‘similarface‘
#email:[email protected]
‘‘‘
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
‘‘‘

  

时间: 2024-10-11 01:06:57

shelve模块的相关文章

Python基础(12)_python模块之sys模块、logging模块、序列化json模块、pickle模块、shelve模块

5.sys模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称 5.1 使用sys.argv进行登录判断,跳过 i/o阻塞 #使用sys.argv进行登录判断,跳过 i/o阻塞 import s

Python中的shelve模块

shelve中有用的函数就是open(),但是下面编写的数据库函数中调用路径是经常出错,如果直接调用一个从来没有用过的文件却能正常运行,暂时没有找出原因. 调用shelve.open()会返回一个shelf对象用来存储内容,将它当做一个普通的字典来存储数据(字典的键一定要是字符串),在存储完毕之后要调用close()函数,关闭文件. 注意为了正确的使用shelve模块修改存储的对象,必须将临时变量绑定到获得的副本上,并且在修改后重新存储这个副本.或者直接将open()中writeback参数设为

python16_day06【类、RE模块、subprocess模块、xml模块、shelve模块】

.title { background-color: #000000; color: #00f508 } 一.shelve模块 1 import shelve 2 3 # 基于pickle模块, 4 5 d = shelve.open('shelve_test') 6 7 8 class Test(object): 9 def __init__(self, n): 10 self.n = n 11 12 t1 = Test(123) 13 t2 = Test(456) 14 name = ['a

json、pickle\shelve模块讲解

json.pickle模块讲解 见我前面的文章:http://www.cnblogs.com/itfat/p/7456054.html shelve模块讲解(超级好用~!) json和pickle的模块只允许dump和load一次,而shelve可以支持多次. shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式 执行这段代码以后会生成三个文件: 然后我们再把它读取出来:

day⑥:shelve模块

shelve 模块 shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式 说白了,就是pickle的高级吧 例子: 一.pickle 处理python的数据格式 ①pickle_dump.py #!/usr/bin/env python #coding=utf-8 #这个例子是pickle dump对比shelve之持久化 import pickle class Test(object): def __init__(self,n

python shelve模块

import shelve import datetime d = shelve.open('shelve_test') '''写入文件''' info = {'age': 22, 'job': 'IT'} name = ['Jack', 'Rose'] d['name'] = name d['info'] = info d['data'] = datetime.datetime.now() d.close() '''读取文件''' d = shelve.open('shelve_test')

python序列化: json &amp; pickle &amp; shelve 模块

一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进行转换Json模块提供了四个功能:dumps.dump.loads.loadpickle模块提供了四个功能:dumps.dump.loads.load json模块:下面通过一些示例来学习:首先我们来看json的dumps和loads方法 s1={"k1":"v1"}

python的shelve模块

shelve shelve是一额简单的数据存储方案,他只有一个函数就是open(),这个函数接收一个参数就是文件名,并且文件名必须是.bat类型的.然后返回一个shelf对象,你可以用他来存储东西,就可以简单的把他当作一个字典,当你存储完毕的时候,就调用close函数来关闭 这个有一个潜在的小问题,如下: import shelve list = [1, 2, 3] she = shelve.open('test.dat') she['d'] = list she['d'].append('f'

day5模块学习--shelve模块

shelve模块 shelve类似于一个key-value数据库,可以很方便的用来保存Python的内存对象,其内部使用pickle来序列化数据,简单来说,使用者可以将一个列表.字典.或者用户自定义的类实例保存到shelve中,下次需要用的时候直接取出来,就是一个Python内存对象,不需要像传统数据库一样,先取出数据,然后用这些数据重新构造一遍所需要的对象.下面是简单示例: shelve存储数据: import shelve,datetime names = ["alex",&quo