zoukankan      html  css  js  c++  java
  • 函数和常用模块【day06】:shelve模块(五)

    本节内容

    1、简述

    2、shelve概念

    3、shelve模块使用

    4、总结

    一、简述

       之前我们说不管是json也好,还是pickle也好,在python3中只能dump一次和load一次,不能dump多次,和load多次,但是我们真想要dump多次和load多次怎么办呢,并且能事项数据的持久化呐?好吧,今天我们就来说说这个shelve模块。

    二、shelve概念

    1、持久化

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import shelve   #导入shelve模块
     
    def stu_data(name,age):   #定义一个函数
        print("register stu:",name,age)
     
    name = ["test","zhang","qi","gao"]   #定义一个列表
     
    info = "name":"zhangqigao","age":18#定义一个字典
     
    with shelve.open("shelve_test") as d:
        d["test"= name    #持久化列表
        d["info"= info       #持久化字典
        d["func"= stu_data   #持久化函数

    代码执行结果:

    生成三个文件夹,分别是:shelve_test.dir、shelve_test.dat、shelve_test.bak

    ①shelve_test.dir内容

    1
    2
    3
    'test', (050)
    'func', (102424)
    'info', (51248)

    ②shelve_test.dat内容

    1
    2
    3
    4
    5
    6
    �]q (X   testqX   zhangqX   qiqX   gaoqe.
    �}q (X   nameqX
       zhangqigaoqX   ageqKu.
    �c__main__
    stu_data
    q .

     ③shelve_test.bak内容

    1
    2
    3
    'test', (050)
    'func', (102424)
    'info', (51248)

     2、解析文件内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import shelve
     
    def stu_data(name,age):   #这边一定要定义相同名字的函数,不然执行报错
        print("stu:",name,age)
     
    with shelve.open("shelve_test") as f:
        print(f['test'])      #解析列表
        print(f['info'])       #解析字典
        print(f["func"]("zhangqsan",22))   #解析函数
     
    #输出
    ['test''zhang''qi''gao']
    {'age'18'name''zhangqigao'}
    stu: zhangqsan 22
    None

    三、shelve模块使用

    3.1、常用方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> import shelve
    >>> d = shelve.open("shelve_test")
    >>> dir(d)
    ['_MutableMapping__marker''__abstractmethods__''__class__''__contains__''__del__',
     '__delattr__''__delitem__''__dict__''__dir__''__doc__''__enter__''__eq__''__exit__',
     '__format__''__ge__''__getattribute__''__getitem__''__gt__''__hash__''__init__',
    '__iter__''__le__''__len__''__lt__''__module__''__ne__''__new__''__reduce__',
     '__reduce_ex__''__repr__''__setattr__''__setitem__''__sizeof__''__slots__''__str__',
     '__subclasshook__''__weakref__''_abc_cache''_abc_negative_cache',
    '_abc_negative_cache_version''_abc_registry''_protocol''cache''clear''close''dict',
     'get''items''keyencoding''keys''pop''popitem''setdefault''sync''update',
    'values''writeback']

     3.2、update

    说明:update方法是如果序列化的值存在,则更新,如果不存在,则新增,用法:update({key:序列化对象})

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #dumps到文件中
    import shelve
     
    info = {
        "name":"zhangqigao",
        "age":18
    }
     
    with shelve.open("shelve_test") as d:
        d['qigaotest'= info   #变量存在
        d.update({'qigaotest':"shuaigaogao"})   #更新已经key为"qigaotest"的值
     
     
    #loads到内存中
    import shelve
     
    with shelve.open("shelve_test") as f:
        print(f.get("qigaotest"))
     
    #输出
    shuaigaogao

    3.3、get

    说明:把文件中的值load到内存中时,通过get它的key值获取

    1
    2
    3
    4
    5
    6
    7
    import shelve
     
    with shelve.open("shelve_test") as f:
        print(f.get("qigaotest")) #或者是f["qigaotest"]
     
    #输出
    shuaigaogao

     注意:如果是通过f["qigaotest"]这种方法取,如果值不存在则会报错,通过get去取,不存在,则会返回none

    四、总结

    1. shelve模块是一个简单的key,value将内存数据通过文件持久化的模块。
    2. shelve模块可以持久化任何pickle可支持的python数据格式。
    3. shelve就是pickle模块的一个封装。
    4. shelve模块是可以多次dump和load。
  • 相关阅读:
    java反射机制简介
    StringBuffer类总结
    java中的断言
    Tomcat禁止外网访问
    InnoDB引擎数据存放位置
    MySQL中的事务
    InnoDB与MyISAM引擎区别
    linux之LVS简介(转自南非的蚂蚁)
    CentOS6.5自带Python2.6.6升级至Python2.7
    利用Rsync在windows和linux之间同步数据
  • 原文地址:https://www.cnblogs.com/luoahong/p/9890481.html
Copyright © 2011-2022 走看看