python如何利用pickle序列化和反序列化任意变量?
发布于 作者:苏南大叔 来源:程序如此灵动~
python语言如何对变量进行序列化呢?如何保存为.pickle文件?又如何从文件反序列化回变量呢?这就是本文要讨论的问题。其实,这些功能都是通过pickle这个内置库来完成的。它和php的serialize()/unserialize()是差不多的效果。

苏南大叔的“程序如此灵动”博客,记录苏南大叔的程序经验文章。本文测试环境:win10,python@3.12.1。pickle模块实现了Python对象结构的二进制序列化和反序列化。
龙套标的角色
import numpy as np
sn = np.array([["苏南大叔","18","学生"],["苏南大哥","20","职员"]])pickle.dumps() 变量序列化为二进制
byte = pickle.dumps(obj),以二进制的形式返回被序列化后的对象byte,其中obj是要序列化的对象。
import pickle
byte = pickle.dumps(sn)
print(byte)pickle.dump() 变量序列化为文件【常用】
pickle.dump(obj, file),将一个对象写入到指定的文件中,其中obj参数是要写入的对象,file是要写入的文件。
# sn = []
with open('t1.pickle', 'wb') as file:
pickle.dump(sn, file)或者:
# sn = []
file = open("t2.pkl", "wb")
pickle.dump(sn, file)
file.close
pickle.loads() 二进制还原为变量
obj = pickle.loads(bytes_object),将序列化后的二进制序列进行反序列化,其中bytes_object是序列化后的二进制序列。
sn = pickle.loads(byte)
print(sn)pickle.load()二进制文件还原为变量【常用】
obj = pickle.load(file),将指定的序列化后的文件进行反序列化,其中file是要进行反序列化的文件。
with open('t1.pickle', 'rb') as file:
sn = pickle.load(file)
print(sn)或者
file = open("t2.pkl", "rb")
sn = pickle.load(file)
file.close
print(sn)
题外话
下面写个题外话:php版本的序列化和反序列化。
$t = ["苏南大叔","18"];
$b = serialize($t); // a:2:{i:0;s:12:"苏南大叔";i:1;s:2:"18";}
$t2 = unserialize($b); // array ( [0] => 苏南大叔 [1] => 18 )从这个例子可以看出,python的序列化和php的序列化,虽然看起来差不多,但实际上还是有很大区别的。
| 语言 | 序列化 | 反序列化 | 双方 |
|---|---|---|---|
| python | pickle.dump() | pickle.load() | 变量和二进制文件 |
| python | pickle.dumps() | pickle.loads() | 变量和二进制 |
| php | serialize() | unserialize() | 变量和字符串 |
python序列化的结果,大家看不懂。php序列化的结果,大家看得懂。
相关文章
很多年前,使用scrapy导出文件的时候,就有这个.pickle格式。参考:
结语
苏南大叔写的“python”经验文章,请点击: