在两个目录中查找指定Excel文件生成路径,代码运行输出为空求助
问题修复方案
现有代码核心问题
- 文件名匹配逻辑失效:
os.walk返回的f是纯文件名(不含路径前缀),'/**/Score_Green_*' in f判断永远为假,且Python原生in操作不支持*通配符匹配,因此代码从未进入写入逻辑,无输出文件属于正常现象。 - 遍历逻辑错误:你将单个文件的完整路径字符串赋值给
ScoreGreen_Files后直接遍历,本质是在逐个遍历字符串的单个字符,即使进入匹配逻辑,pd.read_excel也无法读取有效路径。 - 输出覆盖风险:如果匹配到多个文件,重复写入同一个
OutputFilePath会不断覆盖之前的结果,仅保留最后一个文件的内容。 - 多目录遍历未实现:现有代码仅遍历了第一个输入参数对应的目录,未满足你两个目录查找的需求。
修复后代码(兼容Python 2.7.18)
import os import sys import fnmatch import pandas as pd # 支持传入N个查找目录,最后一个参数为输出路径 input_dirs = sys.argv[1:-1] output_path = sys.argv[-1] # 存储所有匹配到的文件数据 all_dfs = [] for excel_dir in input_dirs: for root, subdirs, files in os.walk(excel_dir): for f in files: # 用fnmatch做通配符匹配,匹配Score_Green_开头的xlsx文件 if fnmatch.fnmatch(f, 'Score_Green_*.xlsx'): full_file_path = os.path.join(root, f) df = pd.read_excel(full_file_path) # 可选:新增一列标记文件来源路径,方便后续区分 df['source_file_path'] = full_file_path all_dfs.append(df) # 合并所有数据后写入Excel,如果不需要合并可以调整为每个文件单独命名输出 if all_dfs: final_df = pd.concat(all_dfs, ignore_index=True) final_df.to_excel(output_path, index=False)
补充说明
- 若运行时提示xlsx写入模块缺失,可安装适配Python2.7的依赖:
pip install openpyxl==2.6.4 - 如果你不需要合并多个匹配文件的内容,而是要每个文件单独输出到目标路径下,可以修改写入逻辑,用原文件名拼接输出路径即可,避免文件覆盖。
内容的提问来源于stack exchange,提问作者user13871772
相关产品推荐
相关产品推荐

