一段时间以来,我一直在尝试读取python文件并打印其变量。是否可以查看并打印另一个文件的变量而无需导入或运行它?我已经搜索过的所有内容仅说明了如何导入或使用execfile等...(免责声明,我可能很傻)
这是我到目前为止所拥有的:
for vars in dir():
print(vars)
现在,这对于从其运行的文件来说效果很好,但是当我尝试以下代码时:
for vars in file:
print(vars)
(文件就是path.read())
好吧,它给了我文件每一行的新字符。我完全不知道我的循环是否正确。我是否需要编写一些内容来手动找到每个变量,然后将其添加到列表中?
答案 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)
或类似的方法在两个程序中将其加载。但这仅在其他程序正在评估它的情况下不更改它的情况下才有效。