2016-02-06 11 views
14

Ich muss die Liste der Attribute eines Python-Moduls abrufen.Get ordered Liste der Attribute eines Python-Moduls

Der Haken, und das ist, wo diese Frage z. von this one, ist, dass ich die Liste geordnet nach der Reihenfolge, die sie in dem Modul angezeigt werden soll.

Als Beispiel betrachten wir das Modul

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

ich die Liste ['b1', 'a0', 'a1'] wollen.

Was ich habe versucht:

>>> import a_module 
>>> dir(a) 
[..., 'a0', 'a1', 'b1'] 

>>> from inspect import getmembers 
>>> [x[0] for x in getmembers(a_module)] 
[..., 'a0', 'a1', 'b1'] 

Gibt es eine Möglichkeit, die Liste zu bekommen, ohne die Datei analysieren zu müssen?

Antwort

4

Ja, Sie müssen die Datei analysieren. Sie müssen jedoch keinen eigenen Parser schreiben, Sie können die Bibliothek ast verwenden.

Arbeiten mit dem Beispiel

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

-Datei Sie können die Attribute auf diese Weise analysieren.

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

Dieses kleine Skript befasst sich nur mit Attributen auf oberster Ebene. Es ignoriert Dinge wie Importe und Klassen- und Funktionsdefinitionen. Je nachdem, wie viele Informationen Sie aus der analysierten Datei extrahieren möchten, haben Sie möglicherweise eine komplexere Logik.

0

Es gibt keinen Weg ohne die Datei zu analysieren.

Die Reihenfolge der Attribute spielt keine Rolle für die Programmierung, es sei denn, Sie versuchen zu dokumentieren. Wenn das der Fall ist, werfen Sie einen Blick auf http://www.sphinx-doc.org/