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'\x80\x03}q\x00(K\x01X\x03\x00\x00\x00youq\x01K\x02X\x03\x00\x00\x00areq\x02K\x03X\x01\x00\x00\x00aq\x03K\x04X\x03\x00\x00\x00pigq\x04u.'

由结果可知: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)
posted @ 2019-02-27 15:10  栗子姑娘  阅读(187)  评论(0编辑  收藏  举报