• 序列化模块


    一. 序列化模块json

    把其他的数据类型 转换成 字符串 bytes 是序列化的过程

    能存在文件和在网上传输的只能是bytes, 所以要转化成字符串

    json模块只支持字符串, 字典(key不能是数字, 数字会变成字符串), 列表, 数字

    json的对象不能含有元组, 集合, 字典的键不能是数字, 键如果是元组会直接报错

    文件中读出来的, 网络上接收来的不能直接运行, 会有恶意代码

    json在所有的语言之间都通用, 包括后端语言 java c c++ c# 和前端语言

    json能够处理的数据类型非常有限

     

    dic = {'key' : 'value','key2' : 'value2'}
    import json
    ret = json.dumps(dic)  # 序列化
    print(ret)
    
    res = json.loads(ret) # 反序列化
    print(res)
    
    向文件中记录字典
    import json
    dic = {'key' : 'value','key2' : 'value2'}
    ret = json.dumps(dic)
    with open('json_file','a') as f:
        f.write(ret)
    
    从文件中读取字典
    with open('json_file','r') as f:
        str_dic = f.read()
    dic = json.loads(str_dic)
    print(dic.items())
    
    dump load 是直接操作文件的
    dic = {'key1' : 'value1','key2' : 'value2'}
    with open('json_file','a') as f:
        json.dump(dic,f)
    
    with open('json_file','r') as f:
        dic = json.load(f)
    print(dic.items())
    
    json不支持连续存取, 需要一个个加上换行符放进文件中, 再一个个地取出来
    dic = {'key1' : 'value1','key2' : 'value2'}
    
    with open('json_file','a') as f:
        str_dic = json.dumps(dic)
        f.write(str_dic+'
    ')
        str_dic = json.dumps(dic)
        f.write(str_dic + '
    ')
        str_dic = json.dumps(dic)
        f.write(str_dic + '
    ')
    
    with open('json_file','r') as f:
        for line in f:
            dic = json.loads(line.strip())
            print(dic.keys())
    
    dumps loads
        在内存中做数据转换 :
            dumps 数据类型 转成 字符串 序列化
            loads 字符串 转成 数据类型 反序列化
    dump load
        直接将数据类型写入文件,直接从文件中读出数据类型
            dump 数据类型 写入 文件 序列化
            load 文件 读出 数据类型 反序列化
    
    dic = {'key':'你好'}
    print(json.dumps(dic,ensure_ascii=False))    # 没有ensure_ascii会输出{"key": "u4f60u597d"}
    
    import json
    data = {'username':['李华','二愣子'],'sex':'male','age':16}
    json_dic2 = json.dumps(data,sort_keys=True,indent=4,separators=(',',':'),ensure_ascii=False)
    # 按键排列, 按,和:换行, 换行时空4个空格
    print(json_dic2)
    

      

     

    二. 序列化模块pickle

    支持在python中几乎所有的数据类型

    只能在python中使用, dumps 序列化的结果只能是字节, 而且不是utf-8或者unicode等格式的字节, 只有Python能解码

    在和文件操作的时候,需要用rb wb的模式打开文件

    可以多次dump和多次load

    import pickle
    dic = {(1,2,3):{'a','b'},1:'abc'}
    ret = pickle.dumps(dic)
    print(ret)
    print(pickle.loads(ret))
    
    dump
    with open('pickle_file','wb') as f:
        pickle.dump(dic,f)
    
    load
    with open('pickle_file','rb') as f:
        ret = pickle.load(f)
        print(ret,type(ret))
    
    dic = {(1,2,3):{'a','b'},1:'abc'}
    dic1 = {(1,2,3):{'a','b'},2:'abc'}
    dic2 = {(1,2,3):{'a','b'},3:'abc'}
    dic3 = {(1,2,3):{'a','b'},4:'abc'}
    with open('pickle_file','wb') as f:
        pickle.dump(dic, f)
        pickle.dump(dic1, f)
        pickle.dump(dic2, f)
        pickle.dump(dic3, f)
    
    with open('pickle_file','rb') as f:
        ret = pickle.load(f)
        print(ret)
        ret = pickle.load(f)
        print(ret)
        ret = pickle.load(f)
        print(ret)
        ret = pickle.load(f)
        print(ret)
    
    with open('pickle_file','rb') as f:
        while True:
            try:
                ret = pickle.load(f)
                print(ret,type(ret))
            except EOFError:             # 报错时, 用except
                break
    

      

      

  • 相关阅读:
    SQL强化
    JSP深入
    会话Session和cookie
    SQL快速入门
    小程序 + node koa2 session存储验证码碰到最大的坑,(喜极而泣 /狗头)
    mongoose 数据如果存在更新 不存在插入
    vue 相同路由不同参数跳转时,不刷新
    因为自己的小服务器读取太慢,弄一个本地的mysql
    git 提交代码不想包括那个文件,比如node_modules
    js中 ! 和 !!
  • 原文地址:https://www.cnblogs.com/NachoLau/p/9513546.html
Copyright © 2020-2023  润新知