gpt4 book ai didi

python - 我可以为此使用 python ast 模块吗?

转载 作者:行者123 更新时间:2023-11-30 23:58:29 25 4
gpt4 key购买 nike

我想编写一个程序,以这种方式修改Python程序:

改变

“一些文字字符串 %” % SOMETHING

functioncall("某个文字字符串 %") % SOMETHING

谢谢

最佳答案

使用 tokenize 可能会更简单-- 调整文档中的示例,

import cStringIO
import tokenize

class Lookahead(object):

def __init__(self, s):
self._t = tokenize.generate_tokens(cStringIO.StringIO(s).readline)
self.lookahead = next(self._t, None)

def __iter__(self):
return self

def next(self):
result = self.lookahead
if result is None: raise StopIteration
self.lookahead = next(self._t, None)
return result


def doit(s):
toks = Lookahead(s)
result = []
for toktype, tokvalue, _, _, _ in toks:
if toktype == tokenize.STRING:
pk = toks.lookahead
if pk is not None and pk[0] == tokenize.OP and pk[1] == '%':
result.extend([
(tokenize.NAME, 'functioncall'),
(tokenize.OP, '('),
(tokenize.STRING, repr(tokvalue)),
(tokenize.OP, ')')
])
continue
result.append((toktype, tokvalue))
return tokenize.untokenize(result)


print doit('"some literal string %" % SOMETHING')

这会打印functioncall ('"someliteral string %"')%SOMETHING。间距非常奇特(需要付出更多的努力才能使间距恰到好处——但这对于从修改后的 AST 重建源来说更糟糕),但如果您要做的只是导入/运行生成的代码(如果您想获得良好的可读性和可编辑性的代码,则不太好——但这是一个足够大的问题,我建议单独提出一个问题;-)。

关于python - 我可以为此使用 python ast 模块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3069695/

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