如何使用Python的pickle模块进行数据序列化?
- 内容介绍
- 文章标签
- 相关推荐
本文共计444个文字,预计阅读时间需要2分钟。
pickle.dump()的结果是bytes,dump使用的f文件句柄需以wb模式打开,load使用的f是'rb'模式。支持几乎所有对象的序列化。对对象的序列化需要该对象对应的类在内存中。对于多次dump/load操作,需要这个对象对应的类在内存中。
pickle
dump的结果是bytes, dump用的f文件句柄需要以wb的形式打开, load所用的f是'rb'模式
- 支持几乎所有对象的序列化
- 对于对象的序列化需要这个对象对应的类在内存中
- 对于多次dump / load的操作做了良好的处理
dic = {1: (12, 3, 4), ('a', 'b'): 4}
pic_dic = pickle.dumps(dic)
print(pic_dic) # bytes类型
new_dic = pickle.loads(pic_dic)
print(new_dic)
结果:
b'\x80\x03}q\x00(K\x01K\x0cK\x03K\x04\x87q\x01X\x01\x00\x00\x00aq\x02X\x01\x00\x00\x00bq\x03\x86q\x04K\x04u.'{1: (12, 3, 4), ('a', 'b'): 4}
pickle支持几乎所有对象的
import pickleclass Student:
def __init__(self, name, age):
self.name = name
self.age = age
zou = Student('aa', 22)
ret = pickle.dumps(zou)
pickle_data = pickle.loads(ret)
print(pickle_data.name)
print(pickle_data.age)
结果:
aa22
例
import pickleclass Student:
def __init__(self, name, age):
self.name = name
self.age = age
zou = Student('aaa', 83)
with open('pickle_demo', 'wb') as f:
pickle.dump(zou, f)
with open('pickle_demo', 'rb') as f:
pic = pickle.load(f)
print(pic.name) # 没有上面的类就会报错,因为句话是从实例化类里拿name属性
结果:
aaa例
import picklewith open('pickle_demo', 'wb') as f:
pickle.dump({'k1': 'v1'}, f)
pickle.dump({'k11': 'v1'}, f)
pickle.dump({'k11': 'v1'}, f)
pickle.dump({'k12': [1, 2, 3]}, f)
pickle.dump(['k1', 'v1', 'l1'], f)
with open('pickle_demo', 'rb') as f:
while True:
try:
print(pickle.load(f))
except EOFError:
break
结果:
{'k1': 'v1'}{'k11': 'v1'}
{'k11': 'v1'}
{'k12': [1, 2, 3]}
['k1', 'v1', 'l1']
本文共计444个文字,预计阅读时间需要2分钟。
pickle.dump()的结果是bytes,dump使用的f文件句柄需以wb模式打开,load使用的f是'rb'模式。支持几乎所有对象的序列化。对对象的序列化需要该对象对应的类在内存中。对于多次dump/load操作,需要这个对象对应的类在内存中。
pickle
dump的结果是bytes, dump用的f文件句柄需要以wb的形式打开, load所用的f是'rb'模式
- 支持几乎所有对象的序列化
- 对于对象的序列化需要这个对象对应的类在内存中
- 对于多次dump / load的操作做了良好的处理
dic = {1: (12, 3, 4), ('a', 'b'): 4}
pic_dic = pickle.dumps(dic)
print(pic_dic) # bytes类型
new_dic = pickle.loads(pic_dic)
print(new_dic)
结果:
b'\x80\x03}q\x00(K\x01K\x0cK\x03K\x04\x87q\x01X\x01\x00\x00\x00aq\x02X\x01\x00\x00\x00bq\x03\x86q\x04K\x04u.'{1: (12, 3, 4), ('a', 'b'): 4}
pickle支持几乎所有对象的
import pickleclass Student:
def __init__(self, name, age):
self.name = name
self.age = age
zou = Student('aa', 22)
ret = pickle.dumps(zou)
pickle_data = pickle.loads(ret)
print(pickle_data.name)
print(pickle_data.age)
结果:
aa22
例
import pickleclass Student:
def __init__(self, name, age):
self.name = name
self.age = age
zou = Student('aaa', 83)
with open('pickle_demo', 'wb') as f:
pickle.dump(zou, f)
with open('pickle_demo', 'rb') as f:
pic = pickle.load(f)
print(pic.name) # 没有上面的类就会报错,因为句话是从实例化类里拿name属性
结果:
aaa例
import picklewith open('pickle_demo', 'wb') as f:
pickle.dump({'k1': 'v1'}, f)
pickle.dump({'k11': 'v1'}, f)
pickle.dump({'k11': 'v1'}, f)
pickle.dump({'k12': [1, 2, 3]}, f)
pickle.dump(['k1', 'v1', 'l1'], f)
with open('pickle_demo', 'rb') as f:
while True:
try:
print(pickle.load(f))
except EOFError:
break
结果:
{'k1': 'v1'}{'k11': 'v1'}
{'k11': 'v1'}
{'k12': [1, 2, 3]}
['k1', 'v1', 'l1']

