我需要检索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']
有没有办法获取列表而不必解析文件?
答案 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/