正在 C 中加载 python 个已腌制的对象
Loading python pickled object in C
我知道可以使用
轻松将泡菜装入 python
import pickle
p = pickle.load(open("file.pkl"))
我想知道如何在 python 中的 pyx/C 代码中加载相同的 pickle 文件?找不到直接加载的方法
也许一个解决方案是在 python 中加载并传递对 C 中对象的引用?
简单的答案是使用 Cython 编译您的代码。那里的一切都会自动完成。
在 Python C API 的上下文中,您可以使用类似以下内容轻松复制此代码:
PyObject *file = NULL, *p = NULL;
PyObject *pickle = PyImport_ImportModule("pickle"); // import module
if (!pickle) goto error;
file = PyFile_FromString("file.pkl", "r"); // open("file.pkl")
if (!pickle) goto error;
p = PyObject_CallMethod(pickle, "load", "O", file); // pickle.load(file)
error:
Py_XDECREF(pickle);
Py_XDECREF(file);
这是针对Python2完成的,而对于Python3open("file.pkl")
需要使用io模块来实现。
我知道可以使用
轻松将泡菜装入 pythonimport pickle
p = pickle.load(open("file.pkl"))
我想知道如何在 python 中的 pyx/C 代码中加载相同的 pickle 文件?找不到直接加载的方法
也许一个解决方案是在 python 中加载并传递对 C 中对象的引用?
简单的答案是使用 Cython 编译您的代码。那里的一切都会自动完成。
在 Python C API 的上下文中,您可以使用类似以下内容轻松复制此代码:
PyObject *file = NULL, *p = NULL;
PyObject *pickle = PyImport_ImportModule("pickle"); // import module
if (!pickle) goto error;
file = PyFile_FromString("file.pkl", "r"); // open("file.pkl")
if (!pickle) goto error;
p = PyObject_CallMethod(pickle, "load", "O", file); // pickle.load(file)
error:
Py_XDECREF(pickle);
Py_XDECREF(file);
这是针对Python2完成的,而对于Python3open("file.pkl")
需要使用io模块来实现。