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

如何解决Python递归遍历子文件夹docx检索内容时报FileNotFoundError错误

问题分析及修复方案

核心错误原因

  • 你在find_doc函数中仅存储了docx文件的纯文件名,没有拼接文件所在的目录路径。子目录下的文件(比如folder1/subfolder1/subfolder2/file007.docx)并不在你切换后的根目录下,直接用纯文件名调用docx2txt.process无法定位到文件,就会抛出FileNotFoundError。
  • 代码中os.chdir(variable)修改当前工作目录的操作是多余的,反而容易引发路径混乱,不需要保留。

修复后代码

第一步:修改文件遍历逻辑,存储完整路径

import os
import docx2txt

def find_doc():
    root_dir = input('What is your directory?')
    doc_files = []
    # 遍历所有目录和文件
    for dirpath, _, filenames in os.walk(root_dir):
        for filename in filenames:
            if filename.lower().endswith(".docx"):
                # 拼接当前目录路径和文件名,得到完整路径
                full_file_path = os.path.join(dirpath, filename)
                doc_files.append(full_file_path)
    return doc_files

第二步:调整检索逻辑,优化退出判断顺序

all_files = find_doc()

while True:
    keyword = input('Input your word or type in Terminate to exit: ')
    # 先判断是否要退出,避免输入终止命令后还执行一次检索
    if keyword.lower() == "terminate":
        break
    for doc_path in all_files:
        content = docx2txt.process(doc_path)
        if keyword.lower() in content.lower():
            # 仅打印文件名时用os.path.basename,需要完整路径直接打印doc_path即可
            print(os.path.basename(doc_path))

可选优化点

如果docx文件数量较多,每次输入关键词都重新读取所有文件会很慢,可以在第一次遍历文件时就把每个文件的文本内容缓存下来,后续检索直接查缓存即可,不需要重复读盘。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:27:02