📜  在pickle python中保存东西(1)

📅  最后修改于: 2023-12-03 15:07:54.647000             🧑  作者: Mango

在pickle Python中保存东西

在Python中,pickle模块允许我们将Python对象序列化为字节流,然后将对象存储在文件中或在网络上传送,然后再将其反序列化回Python对象。

pickle.dump()

使用pickle.dump()函数,可以将Python对象保存在文件中。

import pickle

# 保存一个对象
mylist = [1, 2, 3, 4, 5]
with open('data.pkl', 'wb') as f:
    pickle.dump(mylist, f)

上面的代码将一个列表对象保存到了data.pkl文件中。参数'wb'代表以二进制写入的方式打开文件。在with语句块结束时,文件自动关闭。

pickle.load()

使用pickle.load()函数,可以从文件中读取Python对象,反序列化为Python对象。

import pickle

# 从文件中读取一个对象
with open('data.pkl', 'rb') as f:
    mylist = pickle.load(f)
    print(mylist)

上面的代码从data.pkl文件中读取对象,并将其反序列化成Python对象,最终输出mylist的值。

pickle.dumps()和pickle.loads()

使用pickle.dumps()函数,可以将Python对象序列化成字节流。

import pickle

# 将对象序列化成字节流
mylist = [1, 2, 3, 4, 5]
data = pickle.dumps(mylist)
print(data)

上面的代码将mylist对象序列化成字节流,并将字节流输出到屏幕上。

使用pickle.loads()函数,可以将字节流反序列化为Python对象。

import pickle

# 将字节流反序列化为对象
data = b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03K\x04K\x05e.'
mylist = pickle.loads(data)
print(mylist)

上面的代码将字节流data反序列化为Python对象,并最终输出mylist的值。

注意事项
  • pickle序列化的是Python特定的数据类型,如果想要序列化其他对象,请自行实现pickle序列化协议。
  • pickle是不安全的,因为它会执行反序列化的Python代码,建议不要从不可信的来源反序列化数据。
  • pickle数据格式是Python特定的,不能跨语言使用。
总结

pickle模块提供了非常方便的对象序列化和反序列化功能,可以将Python对象存储在文件中或传输到网络上,适用于各种场景。但是需要注意pickle有安全隐患,使用时请谨慎。