在不导入/运行的情况下查看另一个Python文件的变量

时间:2018-06-30 19:45:06

标签: python variables

一段时间以来,我一直在尝试读取python文件并打印其变量。是否可以查看并打印另一个文件的变量而无需导入或运行它?我已经搜索过的所有内容仅说明了如何导入或使用execfile等...(免责声明,我可能很傻)

这是我到目前为止所拥有的:

for vars in dir():
   print(vars)

现在,这对于从其运行的文件来说效果很好,但是当我尝试以下代码时:

for vars in file:
   print(vars)

(文件就是path.read())

好吧,它给了我文件每一行的新字符。我完全不知道我的循环是否正确。我是否需要编写一些内容来手动找到每个变量,然后将其添加到列表中?

3 个答案:

答案 0 :(得分:3)

使用ast.parse解析代码,通过遍历具有body属性的对象(它们是代码块)来递归地遍历节点,查找Assign对象并获取其{{ 1}}(为变量分配值,这就是您要查找的内容),如果它们是targets对象,则获得其id属性。

Name替换为要解析的python脚本的文件名后,尝试以下代码。

file.py

答案 1 :(得分:1)

不...是。

问题是“变量”是常量还是真变量。

Python运行垃圾回收器。当您运行/导入模块时,它将创建变量。这些变量将具有基于其用法的范围。一旦不再使用它们,垃圾收集器就会从内存中删除对象。

如果为变量分配了固定值(例如ArchivedStudent),则可以像读取文本文件一样直接读取文件-因为它是文本文件。如果要更改这些变量,可以简单地将其写为文本文件。与任何文本匹配项一样,您将有责任跟踪文本中的变量。

如果变量是作为代码的一部分生成的,则否(例如,它在目录中生成文件列表并分配给变量)。您可能需要导入模块或更改模块,以便将输出导出到单独的文件-例如csv-然后您可以读取数据文件。

答案 2 :(得分:1)

首先,您并不笨,只是没有多少人需要这样做。 另外,我想不出一种方法,不用将变量移到单独的json或pickle文件中,然后稍后再使用json.load(filename)或类似的方法在两个程序中将其加载。但这仅在其他程序正在评估它的情况下不更改它的情况下才有效。