0

我想将用 C 编写的头文件转换为 python 中的类

基本上,C中头文件的格式(称为文件header.c如下:

#define ATTR_A          (HELLO +1L)     /*FSDSDF*/
#define ATTR_B          (HELLO +2L)     /*FSFSSF*/

我想做的是编写一个简单的脚本,它可以从中读取文本header.c,然后将格式转换为 python calss,并将结果存储到一个名为header.py. 转换后将是:

ATTR_A        = (HELLO +1L)
ATTR_B        = (HELLO +2L)

我知道如何读取文件以及如何将转换后的结果存储到header.py中,但我知道如何进行转换。有人可以帮帮我吗?谢谢!

4

2 回答 2

3

您可以使用re模块(正则表达式)从每行文本中提取您需要的部分。


例子:

import re

input = ['#define ATTR_A          (HELLO +1L)     /*FSDSDF*/',
         '#define ATTR_B          (HELLO +2L)     /*FSFSSF*/']

r = re.compile(r'#define (\w*)\s*(\(.*\))')

for line in input:
    m = r.match(line)
    print '%s = %s' % (m.group(1), m.group(2))

输出:

ATTR_A = (HELLO +1L)
ATTR_B = (HELLO +2L)
于 2012-07-09T07:13:38.067 回答
-1

我认为最好的方法是re在这里使用。

>>> import re
>>> testinput = '#define ATTR_A          (HELLO +1L)     /*FSDSDF*/'
>>> r = re.split(r'#define (\w*)(\s*)(\(.*\))', testinput)
>>> print '%s = %s' %(r[1], r[3])
ATTR_A = (HELLO +1L)

(\w*)用于提取“ATTR_A”

(\s*)用于提取空格

里面(\(.*\))\(居然是(火柴。匹配除换行符以外的任何字符。\)).*

因此,在 , 之后splitr= ['', 'ATTR_A', ' ', '(HELLO +1L)', ' /*FSDSDF*/']这是一个列表。

于 2012-07-10T05:05:14.300 回答