Python嵌套文件夹中查找文件并动态导入模块的方法
解决方法
步骤1:定位folder1根目录
start.py在folderStart文件夹内,而folderStart是folder1的子文件夹,我们可以通过start.py自身的路径反向推导folder1的绝对路径,用Python自带的pathlib模块处理路径更直观:
from pathlib import Path # 获取start.py所在文件夹的路径 current_dir = Path(__file__).parent # 向上跳转一级目录,得到folder1的绝对路径 folder1_root = current_dir.parent
步骤2:遍历查找目标文件
接下来遍历folder1下所有子目录,找到文件名匹配file_name的.py文件(注意你的file_name不带后缀,所以要匹配文件的“主名”):
file_name = "file3" target_file = None # 遍历folder1下所有.py格式文件 for py_file in folder1_root.rglob("*.py"): # 对比文件主名(去掉后缀的部分)是否等于目标名 if py_file.stem == file_name: target_file = py_file break # 找到第一个匹配文件就停止,若需找全部可删除此行
步骤3:转换为可导入的模块路径
找到文件后,需要把路径转换成Python模块的格式(用点代替路径分隔符,去掉.py后缀),才能用import_module导入:
from importlib import import_module if target_file: # 计算目标文件相对于start.py所在文件夹的路径 relative_path = target_file.relative_to(current_dir) # 转换为模块路径:例如folder2/file3.py -> folder2.file3 module_path = relative_path.with_suffix("").as_posix().replace("/", ".") # 执行动态导入 imported_module = import_module(module_path) # 现在可以使用导入模块里的内容,比如 imported_module.你的函数名() else: print(f"未找到名为{file_name}.py的文件")
注意事项
- 如果
folder1下存在多个同名的file3.py,上述代码会取第一个遍历到的文件,可根据需求调整遍历规则(比如按目录深度排序)。 - 建议在
folder1的所有子文件夹中添加__init__.py文件(Python3.3+可省略,但部分场景下能避免导入异常)。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

