/ / Pythonische Wege zum Importieren von Konstanten - Python

Pythonische Wege, importierte Konstanten zu durchlaufen - Python

Ich importiere einige Konstanten aus meiner Datei constants.py so was:

from constants import (SOME_CONST, OTHER_CONST, ANOTHER_ONE)

Diese Konstanten sind Dateinamen und ich lese Daten aus ihnen. Was ich erreichen möchte, ist folgendes:

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"

Aber ich möchte wissen, ob es einen Weg gibt, zu vermeidenDeklarieren der Liste in der for, wie Durchsuchen oder Erstellen einer Liste importierter Konstanten, da es nicht nur 3 Konstanten wie im Beispiel geben kann und es fehleranfällig ist, Ich möchte es nur importieren und damit arbeiten, was auch immer importiert wird.

Antworten:

5 für die Antwort № 1

Sie können nicht "alle importierten Konstanten" auflisten, nein. Sie sind nur mehr Globals in Ihrem aktuellen Modul.

Ihre Optionen sind:

  1. liste alle Namen auf der constants Modul:

    import constants
    
    for name in dir(constants):
    const = getattr(constants, name)
    

    Sie können diese Namen filtern, wenn sie einem Muster folgen:

    for name in dir(constants):
    if name.startswith("FOO_"):
    

    Der Filter kann einfach sein, indem geprüft wird, ob der Name nur aus Großbuchstaben besteht.

  2. deklarieren Sie die Liste als Teil Ihres Konstantenmoduls und importieren Sie sie Das stattdessen.

  3. deklarieren Sie eine Liste mit Namen in Ihrem aktuellen Modul und verwenden Sie diese, um Ihre Konstanten zu "importieren":

    import constants
    
    const_names = ["SOME_CONST", "OTHER_CONST", "ANOTHER_ONE"]
    for const_name in const_names:
    const = getattr(constants, const_name)
    

2 für die Antwort № 2

Wenn Sie die Python-Konvention der Benennung von Globalen in Großbuchstaben (und nur diese) beachten, können Sie dies tun, wie von Davidmh vorgeschlagen:

for filename in [i for i in dir(constants) where i.upper() == i]:
...