从Python访问CDeclared嵌套结构

2024-09-19 23:41:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经用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层,为了便于说明,我想简化一下。在


Tags: 文件the数据方法datamylibctypes
1条回答
网友
1楼 · 发布于 2024-09-19 23:41:08

您也可以用C读取数据并将其写入JSON文件,然后可以轻松地解析该文件(通常有一个库甚至可以为您完成这项工作;pythonimport json)并使用您所能想到的几乎所有语言设置从任何不同的平台进行访问。同时,你可以访问你的数据,与你在原始C代码中访问它的方式非常相似。在

只是个建议。我认为这将使您的数据更加可移植和通用,但是您将花费更多的时间来编写和解析JSON,就好像您只是将数据流直接从C代码读入python一样。在

相关问题 更多 >