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”经验文章,请点击:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。