我是否可以获取在不同文件中定义变量的行号。例如:
file1.py
x = 5
mylist = [ 1, 2, 3]
file2.py
execfile("file1.py")
# TODO
# get line number of 'x' or 'mylist'
我假设每个变量只定义一次,但以防万一他们定义多次怎么办?
谢谢
我是否可以获取在不同文件中定义变量的行号。例如:
file1.py
x = 5
mylist = [ 1, 2, 3]
file2.py
execfile("file1.py")
# TODO
# get line number of 'x' or 'mylist'
我假设每个变量只定义一次,但以防万一他们定义多次怎么办?
谢谢
使用ast
模块而不是正则表达式的 Ashwini 答案的略微改进版本是:
import ast
class GetAssignments(ast.NodeVisitor):
def visit_Name(self, node):
if isinstance(node.ctx, ast.Store):
print node.id, node.lineno
with open('testing.py') as fin:
module = ast.parse(fin.read())
GetAssignments().visit(module)
而且我认为可以在已经编译的对象上使用类似的东西......
使用regex
:
尝试这样的事情,它会返回它找到的所有行 x = something
:
In [25]: with open("fil.py") as f:
print [index for index,line in enumerate(f) if re.findall(r'(x\s+=)',line)]
....:
[0, 2, 3]
其中fil.py
包含:
x = 5
mylist = [ 1, 2, 3]
x = 7
x = 8