在C

时间:2016-03-03 09:56:58

标签: python python-c-extension

我知道泡菜可以很容易地使用

加载到python中
import pickle
p = pickle.load(open("file.pkl"))

我想知道如何在python中的pyx / C代码中加载相同的pickle文件?我无法找到直接加载它的方法。

也许解决方案是加载python并将引用传递给C?

中的对象

1 个答案:

答案 0 :(得分:1)

简单的答案就是用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);

这是针对Python 2完成的,而对于Python 3,open("file.pkl")需要使用io模块来实现。