我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

python语言如何对变量进行序列化呢?如何保存为.pickle文件?又如何从文件反序列化回变量呢?这就是本文要讨论的问题。其实,这些功能都是通过pickle这个内置库来完成的。它和phpserialize()/unserialize()是差不多的效果。

苏南大叔:python如何利用pickle序列化和反序列化任意变量? - python-pickle-序列化和反序列化
python如何利用pickle序列化和反序列化任意变量?(图3-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的程序经验文章。本文测试环境:win10python@3.12.1pickle模块实现了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

苏南大叔:python如何利用pickle序列化和反序列化任意变量? - 变量到二进制
python如何利用pickle序列化和反序列化任意变量?(图3-2)

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)

苏南大叔:python如何利用pickle序列化和反序列化任意变量? - 二进制到变量
python如何利用pickle序列化和反序列化任意变量?(图3-3)

题外话

下面写个题外话: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的序列化,虽然看起来差不多,但实际上还是有很大区别的。

语言序列化反序列化双方
pythonpickle.dump()pickle.load()变量和二进制文件
pythonpickle.dumps()pickle.loads()变量和二进制
phpserialize()unserialize()变量和字符串

python序列化的结果,大家看不懂。php序列化的结果,大家看得懂。

相关文章

很多年前,使用scrapy导出文件的时候,就有这个.pickle格式。参考:

结语

苏南大叔写的“python”经验文章,请点击:

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

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python