Python使用glob库定位指定文件夹文件失败,请求排查解决
问题分析与修复方案
你的代码存在几处关键问题,导致无法实现需求,下面逐一说明并给出修复后的代码:
核心问题点
- 字符串格式化错误:
"{folder_name}"的替换方式错误,format方法需要传入具体参数,不能直接传递方法对象。 glob.glob参数误用:dir_fd是类Unix系统专属参数,Windows环境下无效;root_dir搭配使用时,匹配模式应为相对路径,无需写D:/前缀。- 重复调用
glob.glob:diskD已经是glob返回的文件路径列表,无需再次传入glob.glob。 os.path.basename参数错误:该函数仅接受单个路径字符串,传入列表会直接触发类型错误。- 缺少文件内容读取逻辑:原代码仅尝试打印文件名,未实现“打印文件内容”的核心需求。
修复后的完整代码
import os import glob # 获取目标文件夹名称 folder_name = input("Please insert the folder name to locate databases: ") # 在D盘递归查找目标文件夹下的所有文件 file_paths = glob.glob(f"D:/**/{folder_name}/**/*.*", recursive=True) if not file_paths: print(f"未找到包含文件夹 {folder_name} 的文件") else: for file_path in file_paths: print(f"\n=== 文件名:{os.path.basename(file_path)} ===") # 读取文件内容,兼容常见编码 try: with open(file_path, 'r', encoding='utf-8') as f: print(f.read()) except UnicodeDecodeError: # utf-8解码失败时尝试gbk编码 with open(file_path, 'r', encoding='gbk') as f: print(f.read()) except Exception as e: print(f"读取失败:{str(e)}")
代码说明
- 用f-string替代
format方法,直接替换folder_name变量,写法更简洁。 - 调整
glob匹配模式为D:/**/{folder_name}/**/*.*,**用于递归匹配任意层级目录,recursive=True开启递归查找。 - 移除无效的
dir_fd参数,适配Windows系统环境。 - 遍历所有匹配到的文件路径,先打印文件名,再通过
with open安全读取文件内容,同时处理常见的编码兼容问题。 - 添加异常捕获,避免因文件损坏、无权限等问题导致程序崩溃。
内容的提问来源于stack exchange,提问作者razyx
相关产品推荐
相关产品推荐

