How to differentiate between “a string” and “a actual code” in python?

前端 未结 2 1583
情话喂你
情话喂你 2020-12-21 23:42

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

相关标签:
2条回答
  • 2020-12-21 23:51

    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.

    0 讨论(0)
  • 2020-12-22 00:13

    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
    
    0 讨论(0)
提交回复
热议问题