zoukankan      html  css  js  c++  java
  • python学习-pickle、json和shelve模块

    用于序列化的两个模块

    • json,用于字符串 和 python数据类型间进行转换(python 内存中的数据对象,如列表、字典是不能直接写到文件中的,因为文件只能存bytes和字符串类型,所以json将内存中的数据类型转成字符串,存入文件,使用时再load。解决了不同语言、不同平台之间的数据交换。)
    • pickle,用于python特有的类型 和 python的数据类型间进行转换(支持所有的python数据类型,两者用法完全一样)

    Json模块提供了四个功能:dumps、dump、loads、load

    pickle模块提供了四个功能:dumps、dump、loads、load

    dump 和load是对文件进行操作,

     使用pickle读和写文件都必须使用二进制形式,rb,wb,

    import pickle
    with open('user','wb') as f:
    pickle.dump('sdad',f)

    import pickle
    with open('user','rb') as f:
    a = pickle.load(f)
    print(a)
    输出:sdad

    dumps和loads对变量操作

    import pickle
    a = [1,2,3,{1:2,'a':'b'}]
    b = pickle.dumps(a)
    print(b)
    c = pickle.loads(b)
    print(c)
    
    输出:
    b'x80x03]qx00(Kx01Kx02Kx03}qx01(Kx01Kx02Xx01x00x00x00aqx02Xx01x00x00x00bqx03ue.'
    [1, 2, 3, {1: 2, 'a': 'b'}]

    shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式

    import shelve
    import datetime
    f = shelve.open('shelve_test')
    
    info = {'name':'xiaowang','age':'22'}
    date = datetime.datetime.now()
    num = [1,2,3,4,5]
    
    f['info'] = info
    f['date'] = date
    f['num'] = num
    f.close()

    执行后,会在当前目录生成三个文件

    然后使用这个文件

    import shelve
    # import datetime
    f = shelve.open('shelve_test')
    print(f['info'])
    print(f['date'])
    print(f['num'])
    print('-----------------')
    for i ,j in f.items():
        print(i,j)

    输出:

    {'age': '22', 'name': 'xiaowang'}
    2017-06-05 00:05:48.809308
    [1, 2, 3, 4, 5]
    -----------------
    info {'age': '22', 'name': 'xiaowang'}
    date 2017-06-05 00:05:48.809308
    num [1, 2, 3, 4, 5]

    补充:shelve模块将python中的变量保存在二进制的shelfe文件中。在window上会创建三个文件,如上面,在OS X上只会创建一个.db文件 。

    shelve模块打开文件不必指定读模式和写模式,打开文件后,既能读又能写,所以,可以改变文件中的变量值,并保存。

    像字典一样,shelf值有keys()和value()方法,返回shelf中键和值的列表的值。因为这些方法返回类似列表的值,而不是真正的列表,所以应该将它们传递给list()函数,取得列表的形式。

  • 相关阅读:
    LeetCode 4. Median of Two Sorted Arrays
    LeetCode 67. Add Binary
    LeetCode 66. Plus One
    Linux驱动之平台设备驱动模型简析(驱动分离分层概念的建立)
    Linux驱动之一个简单的输入子系统程序编写
    Linux驱动之输入子系统简析
    Linux驱动之定时器在按键去抖中的应用
    Linux驱动之同步、互斥、阻塞的应用
    Linux驱动之异步OR同步,阻塞OR非阻塞概念介绍
    Linux驱动之异步通知的应用
  • 原文地址:https://www.cnblogs.com/cq90/p/6886649.html
Copyright © 2011-2022 走看看