変数が別のファイルで定義されている行番号を取得することは可能ですか?例えば:
file1.py
x = 5
mylist = [ 1, 2, 3]
file2.py
execfile("file1.py")
# TODO
# get line number of 'x' or 'mylist'
各変数は1回だけ定義されていると思いますが、複数回定義された場合に備えてどうでしょうか。
ありがとう
変数が別のファイルで定義されている行番号を取得することは可能ですか?例えば:
file1.py
x = 5
mylist = [ 1, 2, 3]
file2.py
execfile("file1.py")
# TODO
# get line number of 'x' or 'mylist'
各変数は1回だけ定義されていると思いますが、複数回定義された場合に備えてどうでしょうか。
ありがとう
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