使用 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
.
的变量
这是我第一次使用 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
。
我想计算我编写的所有 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
.
这是我第一次使用 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
。