使用python从python cod中删除所有字符串和注释

2024-05-16 21:47:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我想计算一下我编写的所有python代码中变量名的唯一性。为此,我需要去掉所有的关键字和保留字(已知)、注释和字符串。例如,以下代码:

''' long comment '''
for x in range(y, y+foo):
    print "Hello", 'world', '''lookout for the # tricky nest''', q # comment

应该被剥离到for, x, in, range, y, foo, print, q的标记,可以使用一组已知的关键字进一步解析它。这是否可以使用python引擎本身(可能与ast module)一起使用?在


Tags: the字符串代码inhelloforworldfoo
2条回答

如果您更关心的是获取变量列表,而不是如何去掉所有字符串、注释等,可以尝试以下方法:

for name in (set(locals()) | set(globals())):
    print(name)

打印本地词典或全局词典中显示的任何内容。使用dir(myobject)获取myobject的变量。在

https://docs.python.org/3/library/functions.html

这是我第一次使用ast模块,但收集源中引用的所有对象名相对容易:

import ast

class Visit(ast.NodeVisitor):
    def __init__(self):
        ast.NodeVisitor.__init__(self)
        self.s = set()
    def visit_Name(self,node):
        self.s.add(node.id)

with open('x.py') as f:
    a=ast.parse(f.read())
v = Visit()
v.visit(a)
print v.s

其中x.py是:

^{pr2}$

输出:

set(['q', 'y', 'range', 'foo', 'x'])

请注意,关键字还没有包括在内,但它确实提取了函数名range。在

相关问题 更多 >