gpt4 book ai didi

python - 递归遍历目录并替换函数调用

转载 作者:行者123 更新时间:2023-12-01 06:07:50 27 4
gpt4 key购买 nike

我想递归地遍历目录并查找至少具有以下一组函数调用之一的所有文件:

A(a)
B(a,b)
C(a,b,c)

现在,不管参数如何,我都可以获得此类文件的列表

grep -r -l '[A-C](' .

尽管我确信我也可以以某种方式匹配这些参数。在这些文件上,我想要执行以下操作:首先,我想要一个备份,即将原始文件保存到 filename.ext_bak 或其他文件中,而在 filename.ext 中,我想要替换每次出现的函数调用

X(a,...) 

#ifdef LOL
X_new(f(a),...)
#else
X(a,...)
#endif

其中 X 可以是 A、B、C,并注意 X_new 中的每个参数都包装在函数 f(...) 中。将不胜感激任何帮助!提前致谢!

最佳答案

这使用 os.walk递归遍历所有文件(从当前工作目录开始)。

backup='_bak' 参数告诉 fileinput.input备份每个文件。

import os
import sys
import re
import fileinput

def sub_callback(match):
func,args=match.groups()
fargs=','.join('f({a})'.format(a=a) for a in args.split(','))
return ('''\
#if def LOL
{func}_new({fa})
#else
{func}({a})
#endif
'''.format(func=func,a=args,fa=fargs))

for root, dirs, files in os.walk('.'):
for line in fileinput.input(
(os.path.join(root,name) for name in files),
inplace=True,
backup='_bak'
):
line=re.sub(r'\b([A-C])\((.*?)\)',sub_callback,line)
sys.stdout.write(line)

关于python - 递归遍历目录并替换函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7260802/

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