You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何一次性导入Main目录下所有子文件夹及其内部文件?

批量导入Main下所有子文件夹及内部文件的解决方案

首先必须明确:Python的模块/包名不允许包含空格,所以你需要先将Folder 1、File 1这类带空格的名称修改为符合规范的命名(比如folder_1、file_1),否则无法完成导入操作。

接下来提供两种可行的批量导入方案:

方案一:修改Main目录的__init__.py实现自动导入

在Main目录下创建(或修改)__init__.py文件,添加以下代码,实现自动遍历并导入所有子包及内部模块:

import os
import importlib

# 获取Main目录的路径
current_dir = os.path.dirname(__file__)

# 遍历Main下的所有子文件夹
for folder_name in os.listdir(current_dir):
    folder_path = os.path.join(current_dir, folder_name)
    # 跳过隐藏文件夹和非目录项
    if not os.path.isdir(folder_path) or folder_name.startswith('.'):
        continue
    
    # 导入当前子包
    package = importlib.import_module(f'.{folder_name}', __name__)
    # 将包添加到Main的命名空间,外部可通过Main.folder_name访问
    globals()[folder_name] = package
    
    # 遍历子文件夹内的Python文件
    for file_name in os.listdir(folder_path):
        if file_name.endswith('.py') and file_name != '__init__.py':
            # 提取模块名(去掉.py后缀)
            module_name = file_name[:-3]
            # 导入子模块
            module = importlib.import_module(f'.{folder_name}.{module_name}', __name__)
            # 将模块添加到Main的命名空间,外部可通过Main.module_name访问
            globals()[module_name] = module

之后你只需要在主脚本中执行:

import Main
# 即可直接访问导入的模块,比如Main.file_1、Main.folder_1等

方案二:在主脚本中动态导入

如果不想修改Main的__init__.py,可以在运行的主脚本中直接编写动态导入代码:

import os
import importlib

# 指定Main目录的路径(如果Main不在Python路径中,需要先添加)
import sys
sys.path.append('.')  # 假设Main在当前工作目录下

main_package = 'Main'

# 遍历Main下的子文件夹
for folder_name in os.listdir(main_package):
    folder_path = os.path.join(main_package, folder_name)
    if not os.path.isdir(folder_path) or folder_name.startswith('.'):
        continue
    
    # 导入子包
    package = importlib.import_module(f'{main_package}.{folder_name}')
    globals()[folder_name] = package
    
    # 遍历子文件夹内的Python文件
    for file_name in os.listdir(folder_path):
        if file_name.endswith('.py') and file_name != '__init__.py':
            module_name = file_name[:-3]
            module = importlib.import_module(f'{main_package}.{folder_name}.{module_name}')
            globals()[module_name] = module

执行这段代码后,你可以直接在当前脚本中使用导入的模块(比如file_1、folder_1)。

注意事项

  • 动态导入会降低代码的可读性,且IDE通常无法提供自动补全提示,若项目需要长期维护,建议权衡利弊。
  • 如果子文件夹或文件数量、结构频繁变化,动态导入会更灵活;反之,固定结构下逐个导入虽然代码长,但更清晰可控。

内容的提问来源于stack exchange,提问作者user19876853

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:45:31