/ / Metodi pitonici di attraversamento delle costanti importate - python

Metodi pitonici di attraversamento delle costanti importate - python

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 № 1

Non è possibile elencare "tutte le costanti importate", no. Sono solo più globali nel tuo attuale modulo.

Le tue opzioni sono:

  1. 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.

  2. dichiara l'elenco come parte del modulo delle costanti e importa quella anziché.

  3. 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]:
...