python打印特定行的变量

时间:2014-07-19 16:07:54

标签: python

我想从python文件的特定行打印变量。

考虑我的文件有行:

self.labelVariable.set( self.entryVariable.get()+" (You clicked the button)" ) 

输出必须是:

labelvariable
entryvariable

我尝试了一个程序:

import os
import re
with open('adapt.py', 'r') as my_file:

    for vars in dir():
        for line in my_file:

            if vars.startswith("self.") == 0:
                print vars

它打印我没有输出,请帮助。答案将不胜感激!

2 个答案:

答案 0 :(得分:1)

尝试使用一些正则表达式来捕获表示所需值的组,而不是尝试按startswith匹配名称。尝试使用reregex

你想要的正则表达式将是(未经过测试,特别编写):

self[.](\w+)[.]set( self.(\w+)[.]get()[+]" (You clicked the button)" )

记得逃脱"标志。此外,您可能希望为这些组命名,因此您可以按名称获取它们,而不是按组索引获取。

如果您在此上下文中不了解某些术语(如组,正则表达式,捕获等) - 请阅读上述链接中的文档 - 它将解释所有内容。

答案 1 :(得分:1)

如果要提取self上的所有属性,您最好还是解析文件。 ast module可以在这里提供帮助。

ast.NodeVisitor utility class进行子类化以查找ast.Attribute个节点,并在self一侧测试value名称:

class SelfAttributesVisitor(ast.NodeVisitor):
    def __init__(self):
        self.attributes = []

    def visit_Attribute(self, node):
        if isinstance(node.value, ast.Name) and node.value.id == 'self':
            self.attributes.append(node.attr)
        else:
            self.visit(node.value)

然后将ast.parse()的结果传递给:

with open('adapt.py', 'r') as my_file:
    source = my_file.read()
    ast_tree = ast.parse(source, 'adapt.py')
    visitor = SelfAttributesVisitor()
    visitor.visit(ast_tree)
    print visitor.attributes

演示您的有限示例:

>>> import ast
>>> source = 'self.labelVariable.set( self.entryVariable.get()+" (You clicked the button)" )'
>>> ast_tree = ast.parse(source, 'adapt.py')
>>> visitor = SelfAttributesVisitor()
>>> visitor.visit(ast_tree)
>>> visitor.attributes
['labelVariable', 'entryVariable']