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

时间:2017-06-29 13:04:42

标签: python python-import importerror

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

导入它
from subdirectory.file import *

但我希望导入该子目录中的每个文件;所以我试过

from subdirectory.* import *

哪个不起作用。有什么建议吗?

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

如果您有以下结构:

$ 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 *

使用__all__中的属性__init__.py,您可以控制在from ... import *语句中准确导入的内容。因此,如果您不希望导入file2.py,例如,您可以执行以下操作:

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

您可以通过

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

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

答案 2 :(得分:1)

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

from file1 import *
from file2 import *

然后你可以这样做:

from subdirectory import *