📜  Python中可用于序列化和反序列化的模块

📅  最后修改于: 2022-05-13 01:54:57.319000             🧑  作者: Mango

Python中可用于序列化和反序列化的模块

Python提供了三个不同的模块,允许我们序列化和反序列化对象:

  1. 元帅模块
  2. 泡菜模块
  3. JSON 模块

1. Marshal 模块:是这三个模块中最老的一个。主要用于读写Python模块的编译后的字节码。甚至我们可以使用 marshal 来序列化Python对象,但不推荐使用。它主要由解释器使用,官方文档警告Python维护者可能会以向后不兼容的方式修改格式。

注意:建议永远不要解组从不受信任或未经身份验证的来源接收的数据。

例子 :

Python3
# importing the module
import marshal 
 
data = {'name': 'sunny','age': 34,'address': 'nasik'}
 
# dumps() return byte object stored in variable 'bytes'
bytes = marshal.dumps(data)   
print('After serialization : ', bytes)
 
# loads() convert byte object to value
new_data = marshal.loads(bytes)   
print('After deserialization : ', new_data)


Python3
# importinig the module
import pickle
 
data = {'st_name': 'Sunny', 'st_id': '9607', 'st_add': 'Nasik'}
with open('data.pickle', 'wb') as f1 :        
   
    # converts object to byte stream(list, dict, etc.)
    pickle.dump(data, f1)      
    print('Pickling Completed...')
 
with open('data.pickle', 'rb') as f2 :
    print('Unpickling the data : ')
     
    # converts byte stream(generated through pickling)back into object
    data = pickle.load(f2)
    print(data)


Python3
# importing the module
import json  
 
# JSON string
students = '{"id":"9607", "name": "Sunny", "department":"Computer"}'
   
# convert string to Python dict
student_dict = json.loads(students)
print(student_dict)
   
print(student_dict['name'])
print('Deserialization Completed.')


Python3
# importing the module
import json   
 
data = {
  "id": "877",
  "name": "Mayur",
  "department": "Comp"
}
    
# Serializing json 
json_object = json.dumps(data)
print(json_object)
print('Serialization Completed.')



输出:

2. Pickle Module:它是另一种序列化和反序列化Python对象的方式。它以二进制格式序列化Python对象,因此它不是人类可读的。它更快,也适用于自定义对象。 Python pickle 模块是Python对象序列化和反序列化的更好选择。如果您不需要人类可读的格式,或者您需要序列化自定义对象,那么建议使用 pickle 模块。

例子:

蟒蛇3

# importinig the module
import pickle
 
data = {'st_name': 'Sunny', 'st_id': '9607', 'st_add': 'Nasik'}
with open('data.pickle', 'wb') as f1 :        
   
    # converts object to byte stream(list, dict, etc.)
    pickle.dump(data, f1)      
    print('Pickling Completed...')
 
with open('data.pickle', 'rb') as f2 :
    print('Unpickling the data : ')
     
    # converts byte stream(generated through pickling)back into object
    data = pickle.load(f2)
    print(data)


输出:

Pickling Completed...
Unpickling the data : 
{'st_name': 'Sunny', 'st_id': '9607', 'st_add': 'Nasik'}

3. JSON 模块:它是一个新创建的模块。它允许我们使用标准的 JSON 文件。 JSON 是一种广泛使用的数据交换格式,非常方便。它是人类可读的并且与语言无关,并且比 XML 更轻量。使用 JSON 模块,我们可以序列化和反序列化几种标准的Python类型,如 bool、dict、int、float、list、 字符串、tuple、none 等。如果我们想要不同语言之间的互操作性,JSON 模块和 XML 是一个不错的选择。

示例:反序列化

蟒蛇3

# importing the module
import json  
 
# JSON string
students = '{"id":"9607", "name": "Sunny", "department":"Computer"}'
   
# convert string to Python dict
student_dict = json.loads(students)
print(student_dict)
   
print(student_dict['name'])
print('Deserialization Completed.')


输出:

{"id": "9607", "name": "Sunny", "department":"Computer"}
Sunny
Deserialization Completed.

示例:序列化

蟒蛇3

# importing the module
import json   
 
data = {
  "id": "877",
  "name": "Mayur",
  "department": "Comp"
}
    
# Serializing json 
json_object = json.dumps(data)
print(json_object)
print('Serialization Completed.')
输出
{"id": "877", "name": "Mayur", "department": "Comp"}
Serialization Completed.

输出:

{"id": "877", "name": "Mayur", "department": "Comp"}
Serialization Completed.