gpt4 book ai didi

python - 基于列表的Python注释C定义

转载 作者:行者123 更新时间:2023-11-30 21:23:02 24 4
gpt4 key购买 nike

我正在尝试将 python 脚本应用于某些 C 文件,以便注释其中的一些定义。

我的目标是改变这一点:

#define D_FOO
D_ADD_TEST(foo)
#define D_BAR
D_ADD_TEST(bar)

进入此:

//#define D_FOO
//D_ADD_TEST(foo)
#define D_BAR
D_ADD_TEST(bar)

要注释的定义存储在我的 python 脚本中的列表中:

> cat myscript.py
#!/usr/bin/env python

var_bar = ['D_FOO']

[Insert the rest of the code here]

我可以尝试什么?

编辑:

结合@sKwa的答案和一些尝试和错误,我得到了这个代码:

def comment_define(source, destination, tokens):
with open(source, 'r') as src, open(destination, 'w') as dst:
for line in src:
for token in tokens:
if "#define D_" + token.upper() in line or "#define\tD_" + token.upper() in line:
line = '//{}//{}'.format(line, next(src))
dst.write(line)

当使用以下输出运行 (comment_define(foo.c, bar.c, tokens)) 时

#define D_ITOA
D_ADD_TEST(itoa);
#define D_STRTRIM
D_ADD_TEST(strtrim);
#define D_LSTNEW
D_ADD_TEST(lstnew);
#define D_LSTDELONE
D_ADD_TEST(lstdelone);
#define D_LSTDEL
D_ADD_TEST(lstdel);
#define D_LSTADD
D_ADD_TEST(lstadd);
#define D_LSTITER
D_ADD_TEST(lstiter);
#define D_LSTMAP
D_ADD_TEST(lstmap);

token = ['lstnew', 'lstdelone', 'lstdel', 'lstadd', 'lstiter', 'lstmap']

输出:

//#define   D_LSTNEW
// D_ADD_TEST(lstnew);
////#define D_LSTDELONE
// D_ADD_TEST(lstdelone);
//#define D_LSTDEL
D_ADD_TEST(lstdel);
//#define D_LSTADD
// D_ADD_TEST(lstadd);
//#define D_LSTITER
// D_ADD_TEST(lstiter);
//#define D_LSTMAP
// D_ADD_TEST(lstmap);

为什么有些人评论了两次?为什么根本没有评论?

最佳答案

如果你尝试一下会怎样?

#!/usr/bin/env python3

import re

TKNS=['lstnew', 'lstdelone', 'lstdel', 'lstadd', 'lstiter', 'lstmap']
SRC='test.c'
DST='testbis.c'

def comment_define(source, destination, tokens):
with open(source, 'r') as src, open(destination, 'w') as dst:
for line in src:
for token in tokens:
if re.match('#define\s+D_%s' % token.upper(), line):
line = '//{}//{}'.format(line, next(src))
break
dst.write(line)

if __name__ == '__main__':
comment_define(SRC, DST, TKNS)

这是基于 @sKwa 的答案,但在我建议添加 break 之前他已将其删除(因此可能对同一行进行了两次注释)。

我用一些正则表达式匹配替换了 in 运算符。

关于python - 基于列表的Python注释C定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48747741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com