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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:52:12