我需要检索Python模块的属性列表.
美中不足的,而这正是这个问题从不同,比如这一次,是我想要的,根据它们出现的模块顺序排序列表.
作为示例,请考虑该模块
# a_module.py
b1 = 1
a0 = 1
a1 = 2
Run Code Online (Sandbox Code Playgroud)
我想要清单['b1', 'a0', 'a1'].
我尝试过的:
>>> import a_module
>>> dir(a)
[..., 'a0', 'a1', 'b1']
>>> from inspect import getmembers
>>> [x[0] for x in getmembers(a_module)]
[..., 'a0', 'a1', 'b1']
Run Code Online (Sandbox Code Playgroud)
有没有办法获取列表而不必解析文件?
是的,您必须解析该文件。不过,您不必编写自己的解析器,您可以使用该ast库。
使用您的示例文件
# a_module.py
b1 = 1
a0 = 1
a1 = 2
Run Code Online (Sandbox Code Playgroud)
您可以通过这种方式解析属性。
import ast
members = []
with open('file.py', 'r') as f:
src = f.read()
tree = ast.parse(src)
for child in tree.body:
if isinstance(child, ast.Assign):
for target in child.targets:
members.append(target.id)
print members
# ['b1', 'a0', 'a1']
Run Code Online (Sandbox Code Playgroud)
这个小脚本仅查看顶级属性。它忽略了导入、类和函数定义等内容。您可能有更复杂的逻辑,具体取决于您想要从解析的文件中提取多少信息。