我没有花太多时间在这个上面(它可能需要改进),这是我第一次使用tokenize模块,但这是我的成果。
当我在寻找Python解析器时,我发现了这个模块,它基本上解析Python代码并对其进行分类,从那里你可以按照自己的需求进行操作。
from token import DEDENT, INDENT, NEWLINE
import tokenize
result = ''
names = {
'if': 'hehe',
'elif': 'haha',
'else': 'hihi',
}
with tokenize.open('z.py') as f:
tokens = tokenize.generate_tokens(f.readline)
for token in tokens:
if names.get(token[1]):
result += names.get(token[1]) + ' '
elif token.type == NEWLINE or token[1] == INDENT or token.type == DEDENT:
result += token[1]
print(result)
else:
result += token[1] + ' '
with open('z.py', 'w') as f:
f.write(result)
更新
之前的代码只能进行编码,通过一些小的修改,您可以重复使用相同的代码进行解码和编码脚本:
from token import DEDENT, INDENT, NEWLINE
import tokenize
encode_name = {
'if': 'hehe',
'elif': 'haha',
'else': 'hihi',
}
def code(name, encode=True):
if encode:
names = name
else:
names = {v: k for k, v in name.items()}
result = ''
with tokenize.open('z.py') as f:
tokens = tokenize.generate_tokens(f.readline)
for token in tokens:
if names.get(token[1]):
result += names.get(token[1]) + ' '
elif token.type == NEWLINE or token[1] == INDENT or token.type == DEDENT:
result += token[1]
else:
result += token[1] + ' '
with open('z.py', 'w') as f:
f.write(result)
code(encode_name, encode = False)
查看官方文档获取更多信息,虽然我自己不是专家,但请随时在此处提问。
非常乐意帮忙
祝你好运,编码愉快
if
不是一个函数,而是一个关键字。更改关键字需要对文件进行单独的处理,不能轻易地在 Python 解释器内部完成:您需要创建一个包装脚本或者使用编码注册表来进行黑魔法操作。 - MegaIng