【问题标题】:Converting format of the text in a file by using python使用python转换文件中文本的格式
【发布时间】:2012-07-10 16:00:42
【问题描述】:

我想把用 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,但我知道如何进行转换。有人可以帮帮我吗?谢谢!

【问题讨论】:

  • 你可以在这里尝试使用regular expressions。这是nice tutorial。这只是解决您的问题的可能方法之一。

标签: python file text


【解决方案1】:

您可以使用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)

【讨论】:

    【解决方案2】:

    我认为最好的方法是在这里使用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*/']之后,这是一个列表。

    【讨论】:

    • 感谢您的解释。这对我帮助很大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2010-10-20
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多