zoukankan      html  css  js  c++  java
  • Python json与pickle

      这是用于序列化的两个模块:
    • json: 用于字符串和python数据类型间进行转换
    • pickle: 用于python特有的类型和python的数据类型间进行转换
    Json模块提供了四个功能:dumps、dump、loads、load
    pickle模块提供了四个功能:dumps、dump、loads、load

    import pickle
    data = {'k1':123, 'k2':888}
    #dumps可以将数据类型转换成只有python才认识的字符串
    p_str = pickle.dumps(data)
    print p_str
    
    
    
    输出结果:
    (dp0
    S'k2'
    p1
    I888
    sS'k1'
    p2
    I123
    s.
    

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

    import pickle
    data = {'k1':123, 'k2':888}
    #打开文件,然后将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
    
    结果:
    {'k2': 888, 'k1': 123}
    文件中显示的内容与上面一致
    

      json的用法和pickle是一样的

    import json
    data = {'k1':123, 'k2':888}
    p_str = json.dumps(data)
    print p_str, type(p_str)
    
    结果:
    {"k2": 123, "k1": 888} <type '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))
    
    结果:
    ({u'k2': 123, u'k1': 123}, <type 'dict'>)
    


    能够读取出来,而且类型也是正确的。
     
    那pickle和json有什么区别呢?
    在上面两段代码中,pickle写入和读取文件时,用的是 ‘b’模式,而json没有。
    json是可以在不同语言之间交换数据的,而pickle只在python之间使用。
    json只能序列化最基本的数据类型,而pickle可以序列化所有的数据类型,包括类,函数都可以序列化。

  • 相关阅读:
    Maven版本管理
    ArrayList集合实现RandomAccess接口有何作用?为何LinkedList集合却没实现这接口
    java常用集合框架关系
    重写equals和hashCode
    项目的继承和聚合详解
    Installation Manager1.8安装
    关于java按位操作运算
    正数负数的二进制表示
    springboot问题排解
    int和Integer有什么区别
  • 原文地址:https://www.cnblogs.com/qianyuliang/p/7201297.html
Copyright © 2011-2022 走看看