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

        shelve模块

        shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式,shelve模块是对pickle模块的补充。我们知道,如果调用pickle模块,向文件中dump()字符串的时候,读取的时候必须一次一次进行load()。

        首先,我们使用pickle向文件中写入信息,来看一下情况:

        import pickle

      ufo = {"alex":123,"tom":456}           
      l1 = [11,22,33,44]
      with open("file_json","wb") as f:
      pickle.dump(ufo,f)                     #把字典dump()到文件中
      pickle.dump(l1,f)                      #把列表dump()到文件中

        上面程序,我们向文件"file_json"中写入了一个字典和一个列表。接下来,我们使用load()来读取文件中的信息。如下:

        import pickle

      with open("file_json","rb") as f:
      a = pickle.load(f)           #使用load()反序列化,读取文件信息
      print(a)

      b = pickle.load(f)           #使用load()反序列化,读取文件信息
      print(b)

        运行如下:

        {'alex': 123, 'tom': 456}
      [11, 22, 33, 44]

        从上面代码运行的结果可以看出,得到的是上面dump()进去的字典和列表。但是只能一次一次的读取,遵循先进先出的原则,最先dump()进去的数据也最先load()出来,但是这样也存在一定的缺陷,比如我想直接取列表的信息,但是由于列表是后面添加进去的,因为只能load()两次,如何才能直接提取列表呢?shelve模块就是解决这样的问题的。

        shelve模块存储文件信息

    import shelve
    
    class func(object):
        def __init__(self,n):
            self.n = n
    
    d = {"alex":"sb","tom":"is","aoi":"456"}
    l = ["alex","pipei","erbi"]
    
    fun = func(1568)    #生成一个类个体
    
    with shelve.open("shelve_test") as f:      #使用shelve模块打开文件
        f["fun"] = fun             #往shelve模块中添加变量,以k,v形式进行添加文件信息,首先添加一个类变量
        f["d"] = d                 #添加一个字典
        f["l"] = l                 #添加一个列表

        shelve模块读取文件信息

    import shelve
    
    #读取
    with shelve.open("shelve_test","r") as f:     #使用shelve打开模块
        a = f.get("d")
        print(a)
    
    
        b = f.get("fun")           #指定键值对形式获取存储信息
        print(b.n)

        运行结果如下:

        {'alex': 'sb', 'tom': 'is', 'aoi': '456'}
      1568

        可以看出,使用shelve模块,能够指定命的形式来获取存储的信息,不需要按照顺序,让我们使用比较方便,克服了pickle的缺陷,因此,要经常使用shelve模块进行文件的存储与读取。   

        注意:使用shelve模块打开文件的方法是open(),shelve.open("file_name"),不需要指定以什么形式打开,并且读取文件的时候也是,使用shelve.open()打开文件。要想获得shelve模块中的文件信息,要使用get()方法,f.get()来获取文件中的信息。

  • 相关阅读:
    Samara SAU ACM ICPC 2013-2014 Quarterfinal Qualification Contest
    German Collegiate Programming Contest 2013:E
    German Collegiate Programming Contest 2013:B
    LA 4975
    Codeforces Beta Round #1
    poj 3667 Hotel
    Codeforces Round #207 (Div. 2)
    【USACO 2.3.1】最长前缀
    【USACO 2.2.4】派对灯
    【USACO 2.2.3】循环数
  • 原文地址:https://www.cnblogs.com/gengcx/p/6917898.html
Copyright © 2011-2022 走看看