/ インポートされた定数を横切るPythonの方法 - python

インポートされた定数を通過するPythonの方法 - Python

私はファイルからいくつかの定数をインポートしています constants.py このような:

from constants import (SOME_CONST, OTHER_CONST, ANOTHER_ONE)

この定数はファイル名であり、私はそれらからデータを読み取っています。私が達成したいのはこれです:

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"

しかし、私は回避する方法があるかどうかを知りたいforの中でリストを宣言したり、インポートされた定数のリストを作成したりするのは、例のように3つだけでなくエラーが発生しやすいので、定数をインポートしてリストに追加する必要があるため、私はそれをインポートし、インポートされているものと一緒に作業したいだけです。

回答:

回答№1は5

"すべてのインポートされた定数"、いいえをリストすることはできません。それらは現在のモジュールの単なるグローバルです。

あなたの選択肢は次のとおりです。

  1. すべての名前を constants モジュール:

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

    パターンに従っている場合は、それらの名前をフィルタリングできます。

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

    フィルターは、名前がすべて大文字であることを確認するだけで簡単に行うことができます。

  2. あなたの定数モジュールの一部としてリストを宣言し、import それ 代わりに。

  3. あなたの現在のモジュールで名前のリストを宣言し、それを使って定数を "インポート"します:

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

回答№2については2

あなたがDavidmhの示唆するように、大文字で大域名を指定するというPythonの慣習を尊重するならば、あなたはそうすることができます:

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