zoukankan      html  css  js  c++  java
  • python 序列化

    序列化与反序列化

    • 序列化: 将【其他形式数据】转换成【字符串】的过程成为序列化
    • 反序列化: 将【字符串】转换成【其他形式数据】的过程称为反序列化

    Python中用于序列化的两个模块

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

    Json和pickle模块都提供了四个功能:dumps、dump、loads、load  但略有差异。

    Json和pickle的区别:

      json  是所有语言都通用,但json只能支持简单的数据类型。

      pickle  是Python所特有的类型,它可以处理一些复杂的数据类型。

    • pickle.dumps()
      将数据通过特殊的形式转化为只有python语言认识的字符串
    #pickle
    import pickle
    data = {1:"you",2:"are",3:"a",4:"pig"}
    data_result1 = pickle.dumps(data)
    print(data_result1)
    '''
    pickle.dumps(data):
    将数据通过特殊的形式转化为只有python语言认识的字符串
    '''

    输出结果:

    b'x80x03}qx00(Kx01Xx03x00x00x00youqx01Kx02Xx03x00x00x00areqx02Kx03Xx01x00x00x00aqx03Kx04Xx03x00x00x00pigqx04u.'

    由结果可知:pickle.dumps返回的的确是一个字符串,b 代表的事二进制的形式。

    • pickle.dump()
      将数据通过特殊形式转化为只有python语言认识的字符串,并写入文件
    import pickle
    data = {1:"you",2:"are",3:"a",4:"pig"}
    with open("day4.txt","wb") as fp:
        data_result = pickle.dump(data,fp)
        fp.write(b"you are a pig")
        print(data_result)
        '''
        pickle.dump(data,fp):
        将数据通过特殊形式转化为只有python语言认识的字符串,并写入文件
        '''

    输出结果:

      None

    • pickle.loads()
    import pickle
    
    data = {1:"you",2:"are",3:"a",4:"pig"}
    data_result1 = pickle.dumps(data) #先将字典形式的data进行序列化成字符串
    s_result = pickle.loads(data_result1)#再通过loads将字符串进行反序列化,还原成字典形式的data
    print(s_result)

    输出结果:

      {1: 'you', 2: 'are', 3: 'a', 4: 'pig'}

    • pickle.load()
    import pickle
    data = {1:"you",2:"are",3:"a",4:"pig"}
    with open("day4.txt","wb") as fp:
        data_result = pickle.dump(data,fp)
        #将data进行序列化
    with open("day4.txt","rb")as f:
        print(pickle.load(f))
        #从文件读取并进行反序列化输出

    输出结果:

      {1: 'you', 2: 'are', 3: 'a', 4: 'pig'}

    • json.dumps()
    #json
    import json
    data = {1:"you",2:"are",3:"a",4:"pig"}
    data_result1 = json.dumps(data)
    print(data_result1)
    print(type(data_result1))
    '''
    json.dumps(data):
    将数据通过特殊的形式转化为所有程序语言都认识的字符串
    '''

    输出结果:

      {"1": "you", "2": "are", "3": "a", "4": "pig"}
      <class 'str'>

    注意: 在Python3中所显示的转换不是很明显,但通过type可知,json.dumps已经将其序列化。

    • json.dump()
    import json
    data = {1:"you",2:"are",3:"a",4:"pig"}
    with open("day4.txt","w") as fp:
        data_result = json.dump(data,fp)
        fp.write("you are a pig")
        print(data_result)
        '''
        pickle.dump(data,fp):
        将数据通过特殊形式转化为所有程序语言都认识的字符串,并写入文件
        '''

    输出结果:

      None

    • json.loads()
    import json
    
    data = {1:"you",2:"are",3:"a",4:"pig"}
    data_result1 = json.dumps(data) #先将字典形式的data进行序列化成字符串
    s_result = json.loads(data_result1)#再通过loads将字符串进行反序列化,还原成字典形式的data
    print(s_result)
    print(type(s_result))

    输出结果:  

      {'1': 'you', '2': 'are', '3': 'a', '4': 'pig'}
      <class 'dict'>

    由结果可知,json.loads()已将其反序列化。

    • json.load()
    import json
    data = {1:"you",2:"are",3:"a",4:"pig"}
    with open("day4.txt","w") as fp:
        data_result = json.dump(data,fp)
        #将data进行序列化
    with open("day4.txt","r")as f:
        print(json.load(f))
        #从文件读取并进行反序列化输出

    输出结果:

      {'1': 'you', '2': 'are', '3': 'a', '4': 'pig'}

    注意:在进行写|读文件时

    • pickle  是以二进制写|读的,即(wb|rb)
    • json  是直接写|读,即(w|r)
  • 相关阅读:
    位运算技巧2
    如果函数的参数是一个指针,不要指望用该指针去申请动态内存
    位运算 技巧1
    野指针?空指针?
    面试题:位操作实现四则运算
    面试题:递归颠倒栈 与栈排序
    求一个数任意位的值及位数
    基数排序
    面试题:最长回文子串(即求对称字符串的最大长度 )
    数据结构之后缀数组suffix array
  • 原文地址:https://www.cnblogs.com/Chestnut-g/p/10443852.html
Copyright © 2011-2022 走看看