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

Python中如何根据文件名前缀获取文件完整路径

问题分析与解决方案

原代码的核心问题是路径拼接逻辑错误:你把目标目录和文件名前缀直接拼在一起当成了搜索路径,导致rglob("*")是在Path_to_file/Hello_这个不存在的路径下查找,完全偏离了需求。下面是修正后的可行实现和优化方案:

基础实现:找到第一个匹配的文件

如果只需要返回第一个符合条件的.txt文件,直接用pathlib.Path的rglob结合通配符过滤,效率比遍历所有文件高得多:

from pathlib import Path

def get_full_file_path():
    # 目标目录
    target_dir = Path("Path_to_file")
    # 文件名前缀
    file_prefix = "Hello_"
    # 递归查找所有以指定前缀开头的txt文件
    for file_path in target_dir.rglob(f"{file_prefix}*.txt"):
        if file_path.is_file():
            # 返回字符串格式路径,也可以直接返回Path对象供后续操作
            return str(file_path)
    # 未找到时返回None,也可以根据需求抛出异常
    return None

优化方案1:非递归查找(已知文件在当前目录下)

如果确定目标文件就在指定目录的根层级,不需要递归子目录,用glob代替rglob,速度更快:

def get_full_file_path_non_recursive():
    target_dir = Path("Path_to_file")
    file_prefix = "Hello_"
    for file_path in target_dir.glob(f"{file_prefix}*.txt"):
        if file_path.is_file():
            return str(file_path)
    return None

优化方案2:返回所有匹配的文件

如果存在多个符合前缀的.txt文件,需要返回所有结果,可以直接收集列表:

def get_all_matching_files():
    target_dir = Path("Path_to_file")
    file_prefix = "Hello_"
    # 先获取所有匹配路径,再过滤出文件(避免误匹配同名目录)
    all_matches = [f for f in target_dir.rglob(f"{file_prefix}*.txt") if f.is_file()]
    # 可选:把Path对象转成字符串
    return [str(f) for f in all_matches]

关键说明

  • 用f"{file_prefix}*.txt"作为通配符,直接过滤出前缀匹配的.txt文件,避免无效遍历
  • Path对象支持直接的路径操作,比字符串拼接更安全,能自动处理不同系统的路径分隔符(Windows/ Linux)

内容的提问来源于stack exchange,提问作者I'm not a robot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:39:25