Python中的Pickle是一种序列化的方式,用于将Python对象转换为二进制格式并存储在文件中
▥Python
𝄐 0
python外部函数,python内置数据,python中内置的数据结构有几种,python内置数据类型有哪些,python内置的系列数据类型,python内置的系列数据类型包括
Python中的Pickle是一种序列化的方式,用于将Python对象转换为二进制格式并存储在文件中。Pickle协议5是Python 3.8版本引入的新协议,它可以显著提高pickle库的性能和可移植性,并支持外部数据缓冲区(external data buffer)。
外部数据缓冲区是指可以将一个大型的Python对象分割成多个块并分别保存到不同的文件或缓冲区中,然后在反序列化时再将它们合并起来。这样做可以大大减小pickle文件的大小,并且可以通过复用已经存在的缓冲区来避免重复拷贝数据。
下面是一个简单的示例,说明如何使用pickle协议5来序列化和反序列化一个具有外部数据缓冲区的Python对象:
python
import pickle
class LargeObject:
def __init__(self, data):
self.data = data
# 将LargeObject对象分成两个块并保存到不同的文件中
with open('data1.pkl', 'wb') as f1, open('data2.pkl', 'wb') as f2:
obj = LargeObject([1, 2, 3, 4, 5])
pickle.Pickler(f1, protocol=5).dump(obj)
pickle.Pickler(f2, protocol=5).dump(obj)
# 从两个文件中读取数据并合并成一个LargeObject对象
with open('data1.pkl', 'rb') as f1, open('data2.pkl', 'rb') as f2:
data1 = f1.read()
data2 = f2.read()
data = memoryview(data1 + data2)
obj1 = pickle.Unpickler(memoryview(data[0: len(data) // 2])).load()
obj2 = pickle.Unpickler(memoryview(data[len(data) // 2: ])).load()
obj = LargeObject(obj1.data + obj2.data)
print(obj.data) # 输出 [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
在上面的示例中,我们创建了一个LargeObject对象,并将它分成两个块,并分别保存到两个文件中。然后在反序列化时,我们读取这两个文件并将它们合并成一个memoryview对象。接着我们使用pickle.Unpickler来加载每个块的数据,并合并它们以获得原始的LargeObject对象。最后,我们检查LargeObject对象的数据是否正确。
Python中的Pickle是一种序列化的方式,用于将Python对象转换为二进制格式并存储在文件中。Pickle协议5是Python 3.8版本引入的新协议,它可以显著提高pickle库的性能和可移植性,并支持外部数据缓冲区(external data buffer)。
外部数据缓冲区是指可以将一个大型的Python对象分割成多个块并分别保存到不同的文件或缓冲区中,然后在反序列化时再将它们合并起来。这样做可以大大减小pickle文件的大小,并且可以通过复用已经存在的缓冲区来避免重复拷贝数据。
下面是一个简单的示例,说明如何使用pickle协议5来序列化和反序列化一个具有外部数据缓冲区的Python对象:
python
import pickle
class LargeObject:
def __init__(self, data):
self.data = data
# 将LargeObject对象分成两个块并保存到不同的文件中
with open('data1.pkl', 'wb') as f1, open('data2.pkl', 'wb') as f2:
obj = LargeObject([1, 2, 3, 4, 5])
pickle.Pickler(f1, protocol=5).dump(obj)
pickle.Pickler(f2, protocol=5).dump(obj)
# 从两个文件中读取数据并合并成一个LargeObject对象
with open('data1.pkl', 'rb') as f1, open('data2.pkl', 'rb') as f2:
data1 = f1.read()
data2 = f2.read()
data = memoryview(data1 + data2)
obj1 = pickle.Unpickler(memoryview(data[0: len(data) // 2])).load()
obj2 = pickle.Unpickler(memoryview(data[len(data) // 2: ])).load()
obj = LargeObject(obj1.data + obj2.data)
print(obj.data) # 输出 [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
在上面的示例中,我们创建了一个LargeObject对象,并将它分成两个块,并分别保存到两个文件中。然后在反序列化时,我们读取这两个文件并将它们合并成一个memoryview对象。接着我们使用pickle.Unpickler来加载每个块的数据,并合并它们以获得原始的LargeObject对象。最后,我们检查LargeObject对象的数据是否正确。
本文地址:
/show-274962.html
版权声明:除非特别标注原创,其它均来自互联网,转载时请以链接形式注明文章出处。