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

Using python to remove all strings and comments from python code

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

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

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 是:

''' 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