My works relates to instrumentation of code fragments in python code. So in my work i would be writing a script in python such that I take another python file as input and i
You could use a Regular Expression. To avoid def
inside quotes then you can use negative look-arounds:
import re
for line in open('A.py'):
m = re.search(r"(?!<[\"'])\bdef\b(?![\"'])", line)
if m:
print r'@decorator #<------ inserted code'
print line
However, there might be other occurances of def
that you or I can't think of, and if we are not careful we end-up writing the Python parser all over again. @Janne Karila's suggestion of using ast.parse
is probably safer in the long term.
Use the ast module to parse the file properly.
This code prints the line number and column offset of each def
statement:
import ast
with open('mymodule.py') as f:
tree = ast.parse(f.read())
for node in ast.walk(tree):
if isinstance(node, ast.FunctionDef):
print node.lineno, node.col_offset