Sto importando alcune costanti dal mio file constants.py
come questo:
from constants import (SOME_CONST, OTHER_CONST, ANOTHER_ONE)
Queste costanti sono nomi di file e sto leggendo i dati da loro, quello che voglio ottenere è questo:
for filename in [SOME_CONST, OTHER_CONST, ANOTHER_ONE]:
# process file
constants.py
SOME_CONST = "filename.txt"
OTHER_CONST = "myfile.xml"
ANOTHER_ONE = "file.csv"
Ma voglio sapere se c'è un modo per evitaredichiarando la lista nel for, come traverse o costruisci una lista di costanti importate, perché ci possono essere molte costanti non solo 3 come nell'esempio ed è soggetta a errori, dato che dovrei importare la costante e aggiungerla alla lista, Voglio solo importarlo e lavorare con qualunque cosa sia importata.
risposte:
5 per risposta № 1Non è possibile elencare "tutte le costanti importate", no. Sono solo più globali nel tuo attuale modulo.
Le tue opzioni sono:
elenca tutti i nomi sul
constants
modulo:import constants for name in dir(constants): const = getattr(constants, name)
Puoi filtrare quei nomi se seguono uno schema:
for name in dir(constants): if name.startswith("FOO_"):
Il filtro può essere semplice come controllare che il nome sia tutto maiuscolo.
dichiara l'elenco come parte del modulo delle costanti e importa quella anziché.
dichiara un elenco di nomi nel tuo modulo corrente e usalo per "importare" le tue costanti:
import constants const_names = ["SOME_CONST", "OTHER_CONST", "ANOTHER_ONE"] for const_name in const_names: const = getattr(constants, const_name)
2 per risposta № 2
Se rispetti la convenzione python di nominare globals in maiuscolo (e solo loro), potresti fare, come suggerito da Davidmh:
for filename in [i for i in dir(constants) where i.upper() == i]:
...