美文网首页
序列化模块

序列化模块

作者: Yanl__ | 来源:发表于2019-08-20 09:33 被阅读0次

    json

    • 通用的序列化格式
    • 只有很少一部分数据类型能够通过json转化成字符串
    dumps 序列化方法 (数字,字符串,列表,字典,元组(元组序列化成str,反序列化为列表))
    loads 反序列化方法
    ##########################
    
    dump 
    
    import json
    dic = {1:'a',2:'b'}
    f = open('file', 'w', encoding='utf-8')
    json.dump(dic, f)
    # json.dump(dic, f, ensure_ascii=False)   ensure_ascii 设置为false可以在文件中显示中文,否则显示bytes
    f.close()
    
    load
    
    f = open('file')
    res = json.load(f)
    f.close()
    print(res)
    

    pickle

    • 所有的python中的数据类型都可以转化成字符串形式
    • pickle序列化的内容只有python能理解
    • 且部分反序列化依赖python代码
      (和json一样有四个方法,dumps, loads,dump,load)由于是dumps是转成二进制内容的,所以通过文件操作时,需要用wb or rb的方式
    import pickle
    dic = {'k1':'v1','k2':'v2'}
    str_dic = pickle.dumps(dic)
    print(str_dic)  # 一串二进制内容
    
    • 可以多次dump和多次load同一个文件中的内容
    import pickle
    import time
    struct_time1  = time.localtime(1000000000)
    struct_time2  = time.localtime(2000000000)
    f = open('pickle_file','wb')
    pickle.dump(struct_time1,f) # 一次dump
    pickle.dump(struct_time2,f)  # 第二次dump
    f.close()
    f = open('pickle_file','rb')
    struct_time1 = pickle.load(f)
    struct_time2 = pickle.load(f)
    print(struct_time1.tm_year)
    print(struct_time2.tm_year)
    f.close()
    

    shelve

    • 序列化句柄
    • 使用句柄直接操作
    import shelve
    f = shelve.open('shelve_file')
    f['key'] = {'int':10, 'float':9.5}  # 直接对文件句柄进行操作,就可以写入数据
    f.close()
    
    import shelve
    f1 = shelve.open('shelve_file')
    # f1 = shelve.open('shelve_file', writeback = True) writeback设置为True,可以对对象进行修改,但是会增加额外的内存消耗,并且在DB close()的时候会将所有对象进行重新写入,因为shelve不知道哪些对象没有修改。
    existing = f1['key'] # 取出数据的时候只需要直接用key获取,如果key不存在,会报错
    f1.close()
    print(existing)
    

    相关文章

      网友评论

          本文标题:序列化模块

          本文链接:https://www.haomeiwen.com/subject/qtkusctx.html