zoukankan      html  css  js  c++  java
  • python(6)- json和pickle模块

    这是用于序列化的两个模块:

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

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

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

    import pickle
    data = {'k1':123, 'k2':123}
    #dumps可以将数据类型转换成只有python才认识的字符串
    p_str = pickle.dumps(data)
    print(p_str)

    执行结果如下:

    b'x80x03}qx00(Xx02x00x00x00k1qx01K{Xx02x00x00x00k2qx02K{u.'

    将数据转换成只有Python认识的字符串,并写入文件:

    import pickle
    data = {'k1':123, 'k2':123}
    #打开文件,然后将data写入
    with open('data.pkl', 'wb') as f:
        pickle.dump(data, f)
    #同样读取的时候也需要打开文件
    with open('data.pkl', 'rb') as f:
        data_1 = pickle.load(f)
    print(data_1)

    执行一下,看看是否正确的读取出来:

    {'k1': 123, 'k2': 123}

    good,  已经正确的读取出来的。

    json的用法和pickle是一样的

    import json
    data = {'k1':123, 'k2':123}
    p_str = json.dumps(data)
    print(p_str, type(p_str))

    执行一下看看结果:

    {"k1": 123, "k2": 123} <class 'str'>

    看起来好像是个字典,但要注意了,实际上这是个字符串,因为json只能是字符串格式,只是看起来像字典而已。

    import json
    data = {'k1':123, 'k2':123}
    
    #打开文件,然后将data写入
    with open('data.pkl', 'w') as f:
        json.dump(data, f)
    
    #同样读取的时候也需要打开文件
    with open('data.pkl', 'r') as f:
        data_1 = json.load(f)
    print(data_1, type(data_1))

    上面这段代码,是写入文件又读取出来。看看执行结果

    {'k2': 123, 'k1': 123} <class 'dict'>

    正确读取出来,而且类型也是正确的。

    那pickle和json有什么区别呢?

    在上面两段代码中,pickle写入和读取文件时,用的是 ‘b’模式,而json没有。

    json是可以在不同语言之间交换数据的,而pickle只在python之间使用。

    json只能序列化最基本的数据类型,而pickle可以序列化所有的数据类型,包括类,函数都可以序列化。

  • 相关阅读:
    变量的解构赋值
    vue-progressbar 知识点
    <script>标签里的defer和async属性 区别(待补充)
    管理node.js版本的模块:n
    node 知识点
    让node支持es模块化(export、import)的方法
    jvm 知识点
    前端 术语
    js的严格模式
    commonJS、AMD、es模块化 区别(表格比较)
  • 原文地址:https://www.cnblogs.com/huangxm/p/5305780.html
Copyright © 2011-2022 走看看