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

时间:2015-02-14 00:41:21

标签: python abstract-syntax-tree

我想在我编写的所有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)?

2 个答案:

答案 0 :(得分:1)

这是我第一次使用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的位置:

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

输出:

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

请注意,关键字尚未包含在内,但确实会选择功能名称range

答案 1 :(得分:0)

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

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

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

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