Python对象序列化
序列化是将对象转换为可以存储/保存(在文件或内存缓冲区中)的格式的过程,因此我们可以稍后对其进行反序列化,并从序列化的格式中恢复原始内容/对象。我们将使用python pickle模块执行所有这些操作。
什么是酸洗?
Python pickle模块用于对python对象结构进行序列化和反序列化。将任何种类的python对象(列表,字典等)转换为字节流(0和1)的过程称为酸洗或序列化或展平或封送处理。我们可以通过称为解酸的过程将字节流(通过酸洗生成)转换回python对象。
要腌制一个物体,我们只需要-
进口泡菜
调用
dumps()
函数
import pickleclass Vehicle:
def __init__(self, number_of_doors, color):
self.number_of_doors = number_of_doors
self.color = color
class Car(Vehicle):
def __init__(self, color):
Vehicle.__init__(self, 5, color)
Maruti = Car('Red')
print(str.format('My Vehicle Maruti is {0} and has {1} doors', Maruti.color, Maruti.number_of_doors))
pickle_Maruti = pickle.dumps(Maruti)
print('Here is my pickled Vehicle: ')
print(pickle_Maruti)
输出结果
My Vehicle Maruti is Red and has 5 doorsHere is my pickled Vehicle:
b'\x80\x03c__main__\nCar\nq\x00)\x81q\x01}q\x02(X\x0f\x00\x00\x00number_of_doorsq\x03K\x05X\x05\x00\x00\x00colorq\x04X\x03\x00\x00\x00Redq\x05ub.'
在上面的示例中,我们创建了Car类的实例,然后对其进行了腌制,将car实例转换为简单的字节数组。腌制完汽车实例后,我们可以轻松地将其存储在二进制文件或db字段中,以后再还原它,以将这些字节转换回对象层次结构。
注意:如果我们要创建一个带有腌制对象的文件,则需要使用dump()
方法而不是dumps()
方法。
解开
这是逆(或酸洗)操作,在此我们将二进制流转换为对象层次结构。
使用load()
pickle模块的功能来完成解腌,并从字节流中返回完整的对象层次结构。
以下是负载
import pickleclass Vehicle:
def __init__(self, number_of_doors, color):
self.number_of_doors = number_of_doors
self.color = color
class Car(Vehicle):
def __init__(self, color):
Vehicle.__init__(self, 5, color)
Maruti = Car('Red')
print(str.format('My Vehicle Maruti is {0} and has {1} doors', Maruti.color, Maruti.number_of_doors))
pickle_Maruti = pickle.dumps(Maruti)
#Now, let's unpickle our car Maruti creating another instance, another car ... unpickle_Maruti
Hyundai = pickle.loads(pickle_Maruti)
#Set another color of our new instance
Hyundai.color = 'Black'
print(str.format("Hyundai is {0} ", Hyundai.color))
print(str.format("Maruti is {0} ", Maruti.color))
在上面的示例中,您可以看到我们对第一个汽车对象(Maruti)进行了腌制,然后将其对另一个变量(Hyundai)进行了腌制,因此在某种意义上我们已经克隆了Maruti以创建现代汽车。
输出结果
My Vehicle Maruti is Red and has 5 doorsHyundai is Black
Maruti is Red
泡菜vs JSON
JSON代表Javascript Object Notation(Java语言对象表示法),是一种用于数据交换的轻量级格式,并且人类可读。相对于pickle,JSON的一大优势在于它是标准化的并且与语言无关。它比泡菜安全得多,速度也更快。
代替泡菜的另一种选择是cPickle,它非常类似于泡菜,但是用C语言编写,速度快了1000倍。您可以将相同的文件用于pickle和cPickle。
import jsonmylist = [2, 4, 5, "ab", "cd", "ef"]
print("Here is my list: ", mylist)
json_string = json.dumps(mylist )
print("Here is my json encoded object: ", json_string)
print ("Here is JSON back to a data structure: ",json.loads(json_string))
输出结果
Here is my list: [2, 4, 5, 'ab', 'cd', 'ef']Here is my json encoded object: [2, 4, 5, "ab", "cd", "ef"]
Here is JSON back to a data structure: [2, 4, 5, 'ab', 'cd', 'ef']
在上面的代码中,我们首先获取对象(我的列表),然后使用“ dumps”方法返回字符串,然后将JSON加载回数据结构,我们使用“ loads”方法将字符串转换为JSON对象数据结构。
以上是 Python对象序列化 的全部内容, 来源链接: utcz.com/z/331324.html