获取Python模块的有序属性列表

Jor*_*tao 14 python

我需要检索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)

有没有办法获取列表而不必解析文件?

Bre*_*bel 4

是的,您必须解析该文件。不过,您不必编写自己的解析器,您可以使用该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)

这个小脚本仅查看顶级属性。它忽略了导入、类和函数定义等内容。您可能有更复杂的逻辑,具体取决于您想要从解析的文件中提取多少信息。