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()来获取文件中的信息。

  • 相关阅读:
    【流量劫持】SSLStrip 终极版 —— location 瞒天过海
    【流量劫持】沉默中的狂怒 —— Cookie 大喷发
    【流量劫持】SSLStrip 的未来 —— HTTPS 前端劫持
    Web 前端攻防(2014版)
    流量劫持 —— 浮层登录框的隐患
    流量劫持能有多大危害?
    流量劫持是如何产生的?
    XSS 前端防火墙 —— 整装待发
    XSS 前端防火墙 —— 天衣无缝的防护
    XSS 前端防火墙 —— 无懈可击的钩子
  • 原文地址:https://www.cnblogs.com/gengcx/p/6917898.html
Copyright © 2011-2022 走看看