当前位置 主页 > 网站技术 > 代码类 >

    python序列化与数据持久化实例详解

    栏目:代码类 时间:2019-12-20 15:08

    本文实例讲述了python序列化与数据持久化。分享给大家供大家参考,具体如下:

    数据持久化的方式有:

    1.普通文件无格式写入:将数据直接写入到文件中

    2.普通序列化写入:json,pickle

    3.DBM方式:shelve,dbm

    相关内容:

    json pickle shelve dbm

    json:

    介绍:

    按照指定格式【比如格式是字典,那么文件中就是字典】将数据明文写入到文件中,类型是bytes的,比如”中文“就会变成Unicode编码

    用法:

    首先要导入模块import json 序列化: json.dump(序列化对象,文件对象) json.dumps(序列化对象),返回值是一个字符串,需要手动将这个字符串写入到文件中
    print("------json序列化--------")
    import json
    import time
    info={
      'date':time.localtime(),
      'name':'中文'
    }
    f=open("test.txt","w")
    print("---------dump---------")
    # json.dump(info,f)
    # f.close()
    print("---------dumps,---------")
    f.write(json.dumps(info))
    f.close()
    反序列化: json.load(文件对象) json.loads(字符串)
    print("------反序列化--------")
    import json
    f=open("test.txt","r")
    print("-------load----------")
    # data=json.load(f)#1
    # print(data)
    print("-------loads----------")
    d2=json.loads(f.read())
    print(d2)
    f.close()
    
    

    对于多次dump\dumps,如何load\loads取出来:

    需要在dump的时候,手动对数据进行划分
    print("------json序列化--------")
    import json
    import time
    info={
      'date':time.localtime(),
      'name':'中文'
      # 'func':hello #注:json不可序列化函数
    }
    info2=['1',2,3,4]
    f=open("test.txt","w")
    print("---------dumps,---------")#用'\n'来区分两份数据
    f.write(json.dumps(info)+"\n")
    f.write(json.dumps(info2)+"\n")
    f.close()
    
    
    import json
    with open("test.txt") as f:
      a=json.loads(f.readline())
      b=json.loads(f.readline())
      print(a,b)
    
    

    pickle:

    介绍:

    用于实现Python数据类型与Python特定二进制格式之间的转换 参数protocol规定了序列化的协议版本,默认情况下使用pikkle序列化数据是bytes的,打开文件的方式必须为二进制格式

    用法:

    首先导入模块import pickle 序列化: pickle.dump(序列化对象,文件对象) pickle.dumps(序列化对象),返回值是一个字符串,需要手动将这个字符串写入到文件中
    import pickle
    info={
      'name':'1',
      'age':2,
    }
    f=open("test2.txt","wb")
    pickle.dump(info,f)#序列化方法1
    # f.write(pickle.dumps(info))#序列化方法2
    f.close()
    
    
    反序列化: pickle.load(文件对象) pickle.loads(字符串)
    print("------反序列化--------")
    import pickle
    f=open("test2.txt","rb")
    data=pickle.loads(f.read())#反序列方法1
    print(data)
    # data=pickle.load(f)#反序列方法2
    # print(data)
    f.close()
    
    

    shelve:

    介绍:

    专门用于将Python数据类型的数据持久化到磁盘,操作类似于dict

    用法:

    首先导入模块import shelve打开一个文件: shelve文件对象 = shelve.open(文件名) 写入:shelve文件对象[key]=value 读出:shelve文件对象.get(key)