2016-02-06 21 views
14

Ho bisogno di recuperare l'elenco degli attributi di un modulo Python.Ottenere l'elenco ordinato degli attributi di un modulo Python

Il fermo, ed è qui che questa domanda è diversa, ad es. da this one, è che voglio la lista ordinata in base all'ordine in cui appaiono nel modulo.

A titolo di esempio, si consideri il modulo

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

voglio la lista ['b1', 'a0', 'a1'].

Quello che ho provato:

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

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

C'è un modo di ottenere la lista senza dover analizzare il file?

risposta

4

Sì, dovrai analizzare il file. Però non devi scrivere il tuo parser, puoi usare la libreria ast.

utilizzando il file il tuo esempio

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

È in grado di analizzare gli attributi in questo modo.

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

Questo piccolo script esamina solo gli attributi di livello superiore. Ignora cose come importazioni e definizioni di classi e funzioni. Potresti avere una logica più complessa a seconda di quante informazioni vuoi estrarre dal file analizzato.

0

Non c'è modo senza analizzare il file.

L'ordine degli attributi non è rilevante per la programmazione, a meno che non si stia tentando di documentare. Se questo è il tuo caso dai un'occhiata a http://www.sphinx-doc.org/

Problemi correlati