我已经用C静态地声明了一个大型结构,但是我需要使用相同的数据在Python中进行一些分析。我不想将这些数据重新复制到Python中以避免错误,有没有一种方法可以直接在Python中访问(只读)这些数据?我看过“ctypes”和SWIG,但似乎没有一个能提供我想要的。。。。在
例如,我有:
/*.h文件*/
typedef struct
{
double data[10];
} NestedStruct;
typedef struct
{
NestedStruct array[10];
} MyStruct;
/*.c文件*/
^{pr2}$理想情况下,我希望有一些东西可以让我把它放到python中,并通过the_data_i_want.array[1].data[2]
或类似的方式访问它。有什么想法吗?我让swig“工作”,因为我能够编译/导入从我的.c文件创建的.so,但是我不能通过cvars访问它。也许还有别的办法?看来这应该没那么难。。。。在
事实上,我想出来了。我加这个是因为我的名声不允许我在8小时内回答我自己的问题,而且我不想在8小时内记住,所以我现在就加上。我肯定有一个很好的理由,我不明白。在
明白了。在
首先,我将.c文件编译到一个库中:
然后,我使用类型来定义一个python类来保存数据:
from ctypes import *
class NestedStruct(Structure):
_fields_ = [("data", c_double*10)]
class MyStruct(Structure):
_fields_ = [("array", NestedStruct*10)]
然后,我将共享库加载到python中:
my_lib = cdll.LoadLibrary("my_lib.so")
然后,我使用“in_dll”方法获取数据:
the_data_i_want = MyStruct.in_dll(my_lib, "the_data_i_want")
然后,我可以像访问C一样访问它
注意,我可能在这里稍微弄乱了语法,因为我的实际数据结构是嵌套的3层,为了便于说明,我想简化一下。在
您也可以用C读取数据并将其写入JSON文件,然后可以轻松地解析该文件(通常有一个库甚至可以为您完成这项工作;python
import json
)并使用您所能想到的几乎所有语言设置从任何不同的平台进行访问。同时,你可以访问你的数据,与你在原始C代码中访问它的方式非常相似。在只是个建议。我认为这将使您的数据更加可移植和通用,但是您将花费更多的时间来编写和解析JSON,就好像您只是将数据流直接从C代码读入python一样。在
相关问题 更多 >
编程相关推荐