zoukankan      html  css  js  c++  java
  • json模块和pickle模块

    json模块和pickle模块

    一、json模块

    作用:用python写了一个程序,用java写了一门程序,这两个程序需要数据之间交流,就产生了一种多种语言通用的数据类型,json串。

    • 序列化:把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening。

      序列化的优点:

      1. 持久保存状态:内存是无法永久保存数据的,当程序运行了一段时间,我们断电或者重启程序,内存中关于这个程序的之前一段时间的数据(有结构)都被清空了。但是在断电或重启程序之前将程序当前内存中所有的数据都保存下来(保存到文件中),以便于下次程序执行能够从文件中载入之前的数据,然后继续执行,这就是序列化。
      2. 跨平台数据交互:序列化时不仅可以把序列化后的内容写入磁盘,还可以通过网络传输到别的机器上,如果收发的双方约定好实用一种序列化的格式,那么便打破了平台/语言差异化带来的限制,实现了跨平台数据交互。

    json数据类型和python数据类型对应关系表

    Json类型 Python类型
    {} dict
    [] list
    "string" str
    520.13 int或float
    true/false True/False
    null None
    JSON Python
    object dict
    array list
    string str
    number (int) int
    number (real) float
    true True
    false False
    null None

    json模块序列化和反序列化的一个过程如下图所示

    json模块

    import json
    # 序列化: 从python的字典(最常用)变成json串,dump
    
    # 反序列化:从json串变成python的字典(最常用), load
    
    1. 内存序列化
    dic = {'name': 'randysun', 'age': 18}
    # 序列化到内存中
    data = json.dumps(dic)
    print(data, type(data))
    
    # 反序列化
    # 注意:无论数据是怎样创建的,只要满足json格式(如果是字典,则字典内元素都是双引号),就可以json.loads出来,不一定非要dumps的数据才能loads
    data = json.loads(data)
    print(data, type(data))
    

    结果:

    {"name": "randysun", "age": 18} <class 'str'>
    {'name': 'randysun', 'age': 18} <class 'dict'>

    1. 文件序列化

      # 对文件内容进行序列化
      with open('test.json', 'w', encoding='utf8') as fw:
          json.dump(dic, fw)
      
      
      with open('test.json', 'r', encoding='utf8') as fr:
          data = json.load(fr)
          print(data)
      

      结果:

      {'name': 'randysun', 'age': 18}

    二、pickle

    Pickle序列化和所有其他编程语言特有的序列化问题一样,它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据,即不能成功地反序列化也没关系。但是pickle的好处是可以存储Python中的所有的数据类型,包括对象,而json不可以。

    import pickle
    dic = {'name': 'randysun', 'age': 18}
    
    
    def func():
        x = 3
        print(x)
    
    
    with open('test.pkl', 'wb') as fw:
        pickle.dump(func, fw)
    
    
    with open('test.pkl', 'rb') as fr:
        data = pickle.load(fr)
        print(data)
        data()
    
    

    结果:

    <function func at 0x000001906940C268>
    3

    在当下的阶段,必将由程序员来主导,甚至比以往更甚。
  • 相关阅读:
    Python 爬虫简介
    Python 线程池(小节)
    Python platform 模块
    Python term 模块
    python 统计使用技巧
    ArcGIS中的WKID(转)
    c#二维码资料
    How to remove live visual tree?
    新书预告 ArcGIS跨平台开发系列第一本
    visual studio 中删除多余的空白行
  • 原文地址:https://www.cnblogs.com/randysun/p/11368135.html
Copyright © 2011-2022 走看看