ディレクトリ配下のすべてのファイルをimportする

Pythonであるフォルダにすべてのファイルをimportする方法


Pythonでは別のスクリプト (例: mod_a.py)をimport mod_aなどとして利用することが出来ますが、例えばpackage_a/ディレクトリにあるファイルをすべて読み込もうと from package_a import *としても読み込むことはできません。

この場合__init__.pyファイルを準備する必要があります。例えば以下のようなファイル構成を考えます

/
  main.py
  package_a/
            __init__.py
            mod_a.py
            mod_b.py

main.py から from package_a import *として読み込むためには、__init__.pyの中で__all__という変数に、*で読み込むモジュール名を設定します。

__all__ = ['mod_a', 'mod_b']

また、すべてのファイルを読み込みたいときはos.listdir()を使用して

import os

__all__ = [k[0:-3] for k in filter(lambda x: x[0] != "_",
                                   os.listdir(os.path.dirname(__file__)))]

のように設定します。この時__init__.py自身や自動で生成される__pycache__を含めないように、最初の文字が_の文字列をfilter()を用いて除外しています。k[0:-3]はファイ名の.pyを削除するためです

おすすめ