zoukankan      html  css  js  c++  java
  • day6_python序列化之 json & pickle & shelve 模块

    一、json & pickle & shelve 模块
    json,用于字符串 和 python数据类型间进行转换
    pickle,用于python特有的类型 和 python的数据类型间进行转换
    Json模块提供了四个功能:dumps、dump、loads、load
    pickle模块提供了四个功能:dumps、dump、loads、load

    json模块:
    下面通过一些示例来学习:
    首先我们来看json的dumps和loads方法
    s1={"k1":"v1"}
    st=json.dumps(s1)
    print(st,type(st))
    s='{"k1":"v1"}'
    dic=json.loads(s)
    print(dic,type(dic))
    

    输出结果

    {"k1": "v1"} <class 'str'>
    {'k1': 'v1'} <class 'dict'>
    

    可以看出json的dumps方法处理数据时会将数据转换为字符类型,loads则会重新还原它的类型。

    再来看json的dump和load方法,通过示例来了解:

    li=[11,22,33]
    li=json.dump(li,open('db','w'))
    li=json.load(open('db','r'))
    print(li,type(li))
    

    Json模块dumps、loads、load、dump的区别:

    load,dump可加载外部文件,处理文件的数据,dumps,loads主要处理内存中的数据

    pickle模块:

    下面我们来看pickle的dumps和loads方法,通过示例我们来了解:

    import pickle
    i=[11,22,33]
    r=pickle.dumps(li)
    print(r)
    result=pickle.loads(r)
    print(result)
    

    结果为:

    b'x80x03]qx00(Kx0bKx16K!e.'
    [11, 22, 33]
    

    pickle的dupms方法会将数据存为pickle特有的数据类型 

    再看pickle的dump和load方法,通过示例我们来了解:

    import pickle
    i=[11,22,33]
    pickle.dump(i,open('db','wb'))
    result=pickle.load(open('db','rb'))
    print(result)
    

    需要注意的是dump文件或者load文件是需要使用二进制。

     

    shelve模块

    shelve是一额简单的数据存储方案,他只有一个函数就是open(),这个函数接收一个参数就是文件名,然后返回一个shelf对象,你可以用他来存储东西,就可以简单的把他当作一个字典,当你存储完毕的时候,就调用close函数来关闭。

    还是来通过示例来了解:

    f = shelve.open('user.db','wc')
    f['baidu'] = 'www.baidu.com'
    f['qq'] = 'www.qq.com'
    f['360'] = 'www.360.cn'
    f.close()
    f = shelve.open('user.db','a+')
    print(f['baidu'],f['qq'],f['360'])
    

    结果为: 

    www.baidu.com
    www.qq.com
    www.360.cn
    

    对shelve序列化数据进行更新操作,通过示例来进行学习:  

    f=shelve.open('user_db','c')
    f["user"]={"数码电器": {"打印机": "3600", "手机": "3800", "电脑": "8000", "照相机": "10000"},
         "服装百货": {"方便面": "4", "夹克": "300", "牛仔裤": "288", "王老吉": "6"},
         "化妆品": {"韩束": "388", "欧诗漫": "666", "欧莱雅": "888", "百雀羚": "259"},
         "汽车":{"帕沙特": "250000", "奇瑞": "100000", "特斯拉": "999999", "宝马X5": "550000"}
         }
    a=(f["user"])
    a.update({"食品":{"猪肉":"12","牛肉":"28","鸡肉":"8","羊肉":"32",}})
    f["user"]=a
    f.close()
    f=shelve.open('user_db','a')
    print(f["user"])
    

      

     

      

      

      

      

      

  • 相关阅读:
    utf8编码引起js输出中文乱码的解决办法 dodo
    VS2005+SQL2005 ASP.NET2.0数据库连接(转) dodo
    VS.net中aspnet_wp.exe”失败。错误代码为 0x8013134b dodo
    SQL总结 dodo
    HttpModule工作原理 dodo
    反向输出字符串 dodo
    如何访问HeaderTemplate中的控件 dodo
    XMLHTTP说明 dodo
    location.reload() 和 location.replace()的区别和应用 dodo
    GridView中模版列使用RowCommand事件如何得到当前列的行索引? dodo
  • 原文地址:https://www.cnblogs.com/xiechao621/p/7878582.html
Copyright © 2011-2022 走看看