我想从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
它打印我没有输出,请帮助。答案将不胜感激!
答案 0 :(得分:1)
尝试使用一些正则表达式来捕获表示所需值的组,而不是尝试按startswith
匹配名称。尝试使用re
或regex
。
你想要的正则表达式将是(未经过测试,特别编写):
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']