晚上好,我首先要说的是,我是一个完全的编码新手,虽然在我的工作中没有严格的要求,但如果能更好地了解它,那将是一个很大的奖励。我目前正在将pickle文件转换为JSON,我确实在互联网上找到了一些python脚本(我想我能够阅读)。但是,我在执行pickle.load命令时总是遇到错误。这是我从互联网上获取的一个示例脚本:
Pickle2JSON is a simple Python Command Line program for converting Pickle file to JSON file.
Arguments: Only one (1) argument is expected which is the pickle file.
Usage: python pickle2json.py myfile.pkl
Output: The output is a JSON file bearing the same filename containing the JSON document of the converted Pickle file.
# import libraries
import pickle
import json
import sys
import os
# open pickle file
with open(sys.argv[1], 'rb') as infile:
obj = pickle.load(infile)
# convert pickle object to json object
json_obj = json.loads(json.dumps(obj, default=str))
# write the json file
with open(
os.path.splitext(sys.argv[1])[0] + '.json',
'w',
encoding='utf-8'
) as outfile:
json.dump(json_obj, outfile, ensure_ascii=False, indent=4)
制作人:Git
每当我运行这个或其他类似的脚本时,我得到:
Traceback (most recent call last):
File "C:\Users\geu19\Desktop\convert.py", line 16, in <module>
obj = pickle.load(infile)
^^^^^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named 'jax._src.device_array'
我已经安装了jax和jaxlib(都是0.4.13,而python是3.11.2),已经尝试了不同的版本,但都没有用。有人能帮忙吗我已经完全卡在这几天,也许这是一些愚蠢的,我仍然不明白。谢谢
我试着改变了python和jax包的版本。我希望有一个JSON文件,我感到沮丧和头痛。
1条答案
按热度按时间bt1cpqcv1#
一般来说,
pickle
只有在您将pickle文件加载到与保存文件的环境完全相同的环境中时才能安全使用。这是因为序列化使用了可能在包版本或Python版本之间发生变化的对象详细信息。在本例中,看起来您将pickle文件保存在JAX版本0.3.X的运行时中(当JAX数组类型为
DeviceArray
时),并试图在JAX版本0.4.X的运行时中加载它(其中DeviceArray
已替换为jax.Array
;参见更改日志)。您应该能够通过安装JAX版本0.3.25或更早的版本来修复这个问题。为了避免将来出现这种困难,您可以考虑使用更稳定的数组序列化方法,例如
jax.numpy.save
,它使用NumPy.npy
文件格式。