一段时间以来,我一直在尝试读取 python 文件并打印其变量。是否可以在不导入或运行的情况下查看和打印另一个文件的变量?我已经搜索过的所有内容都只解释了如何导入或使用 execfile 等...(免责声明,我可能很笨)
这是我目前所拥有的:
for vars in dir():
print(vars)
现在,这对于运行它的文件来说工作得很好,但是当我尝试这段代码时:
for vars in file:
print(vars)
(文件只是 path.read())
好吧,它在新的一行上给了我文件的每个字符。我完全不知道我的循环是否正确。我是否必须编写一些东西来手动查找每个变量,然后将其添加到列表中?
最佳答案
使用ast.parse
解析代码,通过迭代具有body
属性的节点(即代码块)递归遍历节点,寻找分配
对象并获取它们的 targets
(这是被分配了值的变量,这就是您正在寻找的)并获取它们的 id
属性,如果它们是 Name
对象。
将file.py
替换成你要解析的python脚本的文件名后,试试下面的代码。
import ast
import _ast
def get_variables(node):
variables = set()
if hasattr(node, 'body'):
for subnode in node.body:
variables |= get_variables(subnode)
elif isinstance(node, _ast.Assign):
for name in node.targets:
if isinstance(name, _ast.Name):
variables.add(name.id)
return variables
print(get_variables(ast.parse(open('file.py').read())))
关于python - 在不导入/运行的情况下查看另一个 Python 文件的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51118006/