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
相关产品推荐
相关产品推荐

