如何一次性导入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
相关产品推荐
相关产品推荐

