如何打开.pkl文件,查看.pkl文件里的内容(Python3.6)

 1. show_pkl.py:

#show_pkl.py

import pickle
path='aus_openface.pkl'   #path='/root/……/aus_openface.pkl'   pkl文件所在路径
	   
f=open(path,'rb')
data=pickle.load(f)

print(data)
print(len(data))

#输出结果:
{'N_0000000356_00190': array([2.86, 2.27, 1.45, 1.1 , 0.  , 0.65, 0.05, 0.  , 0.75, 1.65, 0.6 , 0.  , 1.86, 0.  , 0.62, 0.25, 0.  ]),
 'N_0000001939_00054': array([0.34, 2.09, 0.  , 2.04, 0.02, 0.  , 0.  , 1.22, 0.  , 0.93, 0.37, 0.  , 0.4 , 0.  , 0.  , 0.22, 0.  ]),
 'N_0000000437_00540': array([0.  , 0.19, 0.02, 0.8 , 0.24, 1.46, 1.18, 0.37, 0.  , 0.  , 1.13, 3.37, 1.24, 0.73, 0.13, 1.83, 0.  ]),
 'N_0000001507_00202': array([1.08, 1.23, 0.  , 1.83, 0.31, 1.08, 0.04, 0.  , 0.24, 1.31, 0.  , 0.25, 0.44, 0.6 , 0.77, 0.  , 0.  ])}
4

2. 运行命令:python show_pkl.py  ,结果如下图所示,便可以看到.pkl文件里的内容了:

(注:文件show_pkl.py保存在F:\learn_pytorch目录下,aus_openface.pkl也保存在F:\learn_pytorch目录下)

 

3. 特殊情况

有时候下载的是国外的代码,需要打开代码里的pkl文件,外国人写代码的编码方式可能和我们不一样。比如我就遇到过,用上面的代码,仍旧打不开外国人给的pkl文件。

报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe1 in position 0: ordinal not in range(128)

解决:加上encoding data=pickle.load(f,encoding='latin1')  ,成功解决我的问题

 

参考:https://blog.csdn.net/LemonTree_Summer/article/details/81906547

Python 中,`pickle` 模块用于序列化和反序列化对象。通过 `pickle.load()` 可以将之前保存为 `.pkl` 格式的二进制文件重新加载回内存中的 Python 对象。 下面是关于如何使用 `pickle.load()` 加载 `.pkl` 文件的具体介绍: --- ### 代码示例 假设你有一个名为 `"model.pkl"` 的文件,其中存储了一个模型对象,你可以按照以下步骤加载它: ```python import pickle import os # 定义 pkl 文件路径 file_path = "your/path/model.pkl" # 检查文件是否存在 if not os.path.exists(file_path): print("文件不存在,请检查路径") else: # 打开并读取 .pkl 文件内容 with open(file_path, 'rb') as file: loaded_model = pickle.load(file) # 输出确认信息 print("模型已成功加载!") print(loaded_model) # 或者对模型进行进一步处理 ``` --- ### 关键点解析 1. **打开模式 (`'rb'`)** - `'r'` 表示只读文本模式,而 `'b'` 表示二进制模式。 - 因为 `.pkl` 文件是以二进制格式保存的,因此需要使用 `'rb'`(read binary)模式来正确读取数据。 2. **异常处理** - 在加载前最好先检查文件是否真的存在,可以防止因路径错误导致程序崩溃。 - 还可以通过捕获异常(如 `EOFError` 或 `ModuleNotFoundError`)来应对可能发生的错误情况。 3. **返回值** - 成功执行后,`pickle.load()` 返回的就是原始保存的对象(例如列表、字典、自定义类实例等)。在这个例子中,我们将这个对象赋给了变量 `loaded_model`。 --- ### 示例应用 如果你曾经保存过一个 Scikit-Learn 训练好的机器学习模型,那么可以这样加载并预测新样本: ```python from sklearn.datasets import load_iris import pickle # 假设这是保存的模型文件 file_path = "path/to/your/saved_model.pkl" # 加载模型 with open(file_path, 'rb') as file: clf = pickle.load(file) # 测试模型 X_test = [[5.0, 3.6, 1.4, 0.2]] # 新的数据点 prediction = clf.predict(X_test) print(f"预测结果: {prediction}") ``` --- ### 注意事项 1. **版本兼容性** 使用不同 Python 版本或环境时需要注意模块依赖问题,某些复杂对象可能会因为缺少相应的库而导致无法正确加载。 2. **安全性问题** `pickle` 存在一个重要的安全漏洞——它可以执行任意代码!所以千万不要随意加载不可信来源提供的 `.pkl` 文件3. **性能限制** 如果文件非常大,则整个过程会占用较多时间和资源;此时可以选择一些更快更高效的替代方案,比如 `joblib` 或压缩技术优化 I/O 效率。 ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_39450145

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值