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

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)}")

代码说明

  1. 用f-string替代format方法,直接替换folder_name变量,写法更简洁。
  2. 调整glob匹配模式为D:/**/{folder_name}/**/*.*,**用于递归匹配任意层级目录,recursive=True开启递归查找。
  3. 移除无效的dir_fd参数,适配Windows系统环境。
  4. 遍历所有匹配到的文件路径,先打印文件名,再通过with open安全读取文件内容,同时处理常见的编码兼容问题。
  5. 添加异常捕获,避免因文件损坏、无权限等问题导致程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:30:16