如何从 Python 中的不同文件夹导入所有文件

how to import all files from different folder in Python

目录中有 __init__.py,我可以通过

导入它
from subdirectory.file import *

但是我想导入该子目录中的所有文件;所以我尝试了

from subdirectory.* import *

这没有用。有什么建议吗?

如果你有以下结构:

$ tree subdirectory/
subdirectory/
├── file1.py
├── file2.py
└── file3.py

并且您希望程序自动获取位于此 subdirectory 中的每个模块并以特定方式处理它,您可以按如下方式实现:

import glob

# Get file paths of all modules.
modules = glob.glob('subdirectory/*.py')

# Dynamically load those modules here.

有关如何动态加载模块的信息,请参阅 this question


在您的 subdirectory/__init__.py 中,您可以通过以下方式导入所有本地模块:

from . import file1
from . import file2
# And so on.

您可以通过

导入本地模块的内容
from .file1 import *
# And so on.

然后您可以通过

导入这些模块(或内容)
from subdirectory import *

使用 __init__.py 中的属性 __all__,您可以控制在 from ... import * 语句中导入的内容。因此,如果您不想导入 file2.py,例如您可以这样做:

__all__ = ['file1', 'file3', ...]

您可以通过

访问这些模块
import subdirectory
from subdirectory import *

for name in subdirectory.__all__:
    module = locals()[name]

您的 __init__.py 文件应如下所示:

from file1 import *
from file2 import *

然后你可以做:

from subdirectory import *

在尝试了一些不同的解决方案后找到了这个方法(如果您在相邻目录中有一个名为 'folder' 的文件夹):

for entry in os.scandir('folder'):
    if entry.is_file():
        string = f'from folder import {entry.name}'[:-3]
        exec (string)