Python实现TXT行与Excel文件名匹配获取绝对路径
原代码问题排查
原代码无法正常匹配目标文件,由以下几个明确问题导致:
- 缩进语法错误:
for group in groups:循环下属的执行代码没有按Python要求缩进,读取TXT的代码块缩进也不规范,会直接触发语法报错 - 未定义变量:代码中使用了从未声明赋值的
groups1变量,运行时会直接抛出NameError - 匹配逻辑错误:
csv_files列表存储的是带完整目录路径、带.xlsx后缀的文件绝对路径,直接拿TXT中读取的纯名称(比如Johny)判断是否在全路径列表中,既无法精准匹配同名不同后缀的文件,也会因为路径前缀的存在匹配失败;同时列表推导的判断方向写反,无法得到预期结果 - 命名混淆:将读取到的xlsx文件列表命名为
csv_files,后续维护时容易出现逻辑错误
正确实现方案
以下代码可直接运行,会自动读取TXT名称、扫描目标目录下的xlsx文件、完成精准匹配,最终返回匹配到的文件绝对路径,同时提示未找到对应文件的名称:
import os import glob # 读取TXT中的名称列表,自动过滤空行、首尾空白字符 with open('groups.txt', 'r', encoding='utf8') as f: groups = [line.strip() for line in f.readlines() if line.strip()] # 配置要扫描的目标目录,默认取当前脚本运行目录,可自行替换为其他目录路径 target_dir = os.getcwd() # 获取目标目录下所有.xlsx后缀文件的绝对路径 xlsx_file_list = glob.glob(os.path.join(target_dir, "*.xlsx")) # 构建「无后缀文件名 -> 文件绝对路径」的映射字典,避免重复遍历 file_map = {} for file_abs_path in xlsx_file_list: # 从全路径中提取带后缀的文件名 filename_with_ext = os.path.basename(file_abs_path) # 去掉.xlsx后缀,得到纯文件名 pure_filename = os.path.splitext(filename_with_ext)[0] file_map[pure_filename] = file_abs_path # 逐个匹配TXT中的名称,分类存储匹配结果 matched = {} not_matched = [] for name in groups: if name in file_map: matched[name] = file_map[name] else: not_matched.append(name) # 打印结果 print("=== 匹配成功的文件绝对路径 ===") for name, abs_path in matched.items(): print(f"{name}: {abs_path}") if not_matched: print("\n=== 未找到对应Excel文件的名称 ===") for name in not_matched: print(name)
使用提示:如果需要扫描其他目录,只需要修改
target_dir变量的值为目标目录的绝对路径即可;如果需要忽略大小写匹配,可以在构建file_map和匹配名称时,统一将纯文件名、TXT读取的名称转换为全小写/全大写后再做比对。
内容的提问来源于stack exchange,提问作者Kalyan N
相关产品推荐
相关产品推荐

