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

时间:2016-02-06 08:26:55

标签: python

我需要检索Python模块的属性列表。

捕获,这就是这个问题不同的地方,例如来自this one,我希望列表按照它们在模块中出现的顺序排序。

例如,考虑模块

# a_module.py
b1 = 1
a0 = 1
a1 = 2

我想要列表['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']

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

2 个答案:

答案 0 :(得分:4)

是的,您必须解析该文件。您不必编写自己的解析器,但可以使用ast库。

使用您的示例文件

# a_module.py
b1 = 1
a0 = 1
a1 = 2

您可以通过这种方式解析属性。

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']

这个小脚本只查看顶级属性。它忽略了诸如导入,类和函数定义之类的东西。根据您要从解析文件中提取的信息量,您可能拥有更复杂的逻辑。

答案 1 :(得分:0)

没有解析文件就没有办法。

除非您尝试记录,否则属性顺序对编程无关紧要。如果是这种情况,请查看http://www.sphinx-doc.org/