Python递归文件搜索函数结果无法追加到列表、返回空列表问题求助
问题根因
- 递归调用
simple_search(folder_path, filename)时,没有接收子目录执行后返回的匹配结果,也没有将这部分结果合并到当前层级的found_files列表中。所有子目录下匹配到的文件路径仅会被打印,无法传递到最顶层函数的返回值中,如果你的测试用例中匹配文件全部位于子目录,顶层函数自然会返回空列表。 - (可选优化问题)代码中两次调用
os.walk(path)会重复遍历当前目录,增加不必要的IO开销;硬编码路径分隔符\\仅适配Windows系统,跨平台运行会出错。
修正后的代码
import os def simple_search(path, filename) : found_files = [] try: # 单次遍历即可同时获取当前目录下的文件夹、文件列表 root, folders, files = next(os.walk(path)) for i in files: if filename in i: full_path = os.path.join(path, i) print(full_path) found_files.append(full_path) for folder in folders: folder_path = os.path.join(path, folder) # 合并子目录的搜索结果到当前列表 found_files.extend(simple_search(folder_path, filename)) except StopIteration: pass return found_files
修改说明
修改后递归调用返回的子目录匹配结果会通过extend方法追加到当前层级的结果列表中,所有层级匹配到的文件路径都会逐层汇总到最顶层函数的返回值,返回结果和print输出的内容完全一致。同时优化了目录遍历逻辑和路径拼接方式,代码兼容性和运行效率更高。
内容的提问来源于stack exchange,提问作者Pouya Abdy
相关产品推荐
相关产品推荐

