Python中可用于序列化和反序列化的模块
Python提供了三个不同的模块,允许我们序列化和反序列化对象:
- 元帅模块
- 泡菜模块
- 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.')
输出:
After serialization : b’\xfb\xda\x04name\xda\x05sunny\xda\x03age\xe9″\x00\x00\x00\xda\x07address\xda\x05nasik0′
After deserialization : {‘name’: ‘sunny’, ‘age’: 34, ‘address’: ‘nasik’}
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.