zoukankan      html  css  js  c++  java
  • json&pickle序列化

    用于序列化的两个模块

    • json,用于字符串 和 python数据类型间进行转换
    • pickle,用于python特有的类型 和 python的数据类型间进行转换

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

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

     序列化和反序列化:

      eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,eval就不管用了,所以eval的重点还是通常用来执行一个字符串表达式,并返回表达式的值。

    ​   我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。

    为什么要序列化?
    1:持久保存状态

    在断电或重启程序之前将程序当前内存中所有的数据都保存下来(保存到文件中),以便于下次程序执行能够从文件中载入之前的数据,然后继续执行,这就是序列化。

    2:跨平台数据交互

    序列化之后,不仅可以把序列化后的内容写入磁盘,还可以通过网络传输到别的机器上,如果收发的双方约定好实用一种序列化的格式,那么便打破了平台/语言差异化带来的限制,实现了跨平台数据交互。

    在python中,有专门处理json格式的模块—— json 和 picle模块

    json:序列化

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也就是python里面的列表。

    Json 模块提供了四个方法: dumps、dump、loads、load

    dumps和dump 序列化方法
    序列化成字符串:json.dumps(json_obj)
    序列化字符串到文件中:json.dump(json_obj, write_file)

    import json
    # 将json类型的对象与json类型的字符串相互转换
    # {} 与 [] 嵌套形成的数据(python中建议数据的从{}开始)
    dic = {
        'a': 1,
        'b': [1, 2, 3, 4, 5]}
    # 序列化: 将python的字典转化为字符串传递给其他语言或保存
    json_str = json.dumps(dic)
    print(json_str)
    with open('1', 'w', encoding='utf-8') as w:
        json.dump(dic, w)  # 先将dic对象转化为字符串,再写入文件
        # w.write(dic)

    loads和load 反序列化方法
    反序列化成对象:json.loads(json_str)
    从文件读流中反序列化成对象:json.load(read_file)

    import json
    # 反序列化
    json_str = '''{"a": 1, "b": ['1', 2, 3, 4, 5]}'''
    # json_str = "{'a': 1, 'b': [1, 2, 3, 4, 5]}"  
    json类型的字符串不认单引号''
    json_str = '''{"a": 1, "b": [1, 2, 3, 4, 5]}'''
    new_dic = json.loads(json_str)  
    print(new_dic, type(new_dic))
    with open('1', 'r', encoding='utf-8') as r:
        res = json.load(r)
        print(res)

    pickle:序列化

    pickle 模块提供了四个方法: dumps、dump、loads、load

    dumps和dump 序列化方法
    序列化成字符串:json.dumps(json_obj)
    序列化字符串到文件中:json.dump(json_obj, write_file)

    import pickle
    dic = {
        'a': 1,
        'b': [1, 2, 3, 4, 5]
    }
    with open('2', 'wb') as w:
        pickle.dump(dic, w)

    loads和load 反序列化方法
    反序列化成对象:json.loads(json_str)
    从文件读流中反序列化成对象:json.load(read_file)

    import pickle
    dic = {
        'a': 1,
        'b': [1, 2, 3, 4, 5]
    }
    with open('2', 'rb') as r:
        print(pickle.load(r))

    json模块和picle模块都有 dumps、dump、loads、load四种方法,而且用法一样。
    不一样的是json模块序列化出来的是通用格式,其它编程语言都认识,就是普通的字符串,
    而picle模块序列化出来的只有python可以认识,其他编程语言不认识的,表现为乱码

  • 相关阅读:
    Diocp截图
    [DIOCP视频]-DIOCPFileServer视频
    DIOCP 运作核心探密
    DIOCP-DIOCPv5的处理能力
    【被C折腾系列】用C调DIOCP编码客户端通信
    DIOCP-V5发布
    MyBean通用报表插件介绍
    Amazon
    输出所有大小写字符的组合
    删除最少字符生成Palindrome
  • 原文地址:https://www.cnblogs.com/happystudyhuan/p/12335747.html
Copyright © 2011-2022 走看看