如何解决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
相关产品推荐
相关产品推荐

