使用for循环读取CSV指定顺序文件时出现顺序错乱问题
解决os.walk遍历顺序混乱&按Week处理数据的问题
问题根源
os.walk返回的文件/目录顺序由操作系统底层存储逻辑决定,并非按名称/数字排序,导致每次运行顺序不一致- 未提前按Week对原始CSV数据做排序处理,后续匹配时没有明确的处理基准
- 文件名匹配逻辑可能存在疏漏,导致读取了错误的
costs.csv数据
分步解决方案
1. 先整理原始CSV,按Week排序并建立映射
先读入包含Week和File Name的CSV,按Week字段排序,同时建立Week到对应文件名的字典,确保后续处理有明确的顺序基准。
import pandas as pd # 读取原始CSV(替换成你的文件路径) raw_df = pd.read_csv("你的原始CSV文件路径.csv") # 按Week排序(假设Week是数字或可排序的字符串类型) sorted_raw_df = raw_df.sort_values(by="Week").reset_index(drop=True) # 建立Week -> 目标文件名的映射字典 week_file_map = dict(zip(sorted_raw_df["Week"], sorted_raw_df["File Name"]))
2. 遍历文件夹时主动排序,避免随机顺序
针对results_tdr_periods_[数字]_1格式的文件夹,提取其中的数字部分,按数字从小到大排序,确保遍历顺序固定一致。
import os import re # 根文件夹路径(替换成你Colab中All Tests的实际路径,挂载Drive后要写完整路径) root_dir = "/content/All Tests" # 收集所有符合格式的目标文件夹 target_folders = [] for dirpath, _, _ in os.walk(root_dir): # 用正则匹配文件夹命名格式,提取数字部分 match = re.search(r"results_tdr_periods_(\d+)_1", dirpath) if match: period_num = int(match.group(1)) target_folders.append( (period_num, dirpath) ) # 按数字从小到大排序文件夹列表 target_folders.sort(key=lambda x: x[0])
3. 精准匹配文件名,读取正确的costs.csv
遍历排序后的文件夹,找到对应的costs.csv,并根据原始CSV的Week映射精准匹配文件名,确保数据对应正确。
# 存储最终结果的字典,按Week顺序存储 final_results = {} for period_num, folder_path in target_folders: costs_path = os.path.join(folder_path, "costs.csv") if not os.path.exists(costs_path): print(f"警告:{folder_path}中未找到costs.csv") continue # 读取costs.csv(根据实际数据调整参数,比如分隔符、表头行等) costs_df = pd.read_csv(costs_path) # 匹配当前costs.csv对应的Week(根据你的业务逻辑调整,示例为文件名匹配) for week, expected_filename in week_file_map.items(): if expected_filename in costs_df["File Name"].values: final_results[week] = costs_df[costs_df["File Name"] == expected_filename] break else: print(f"{folder_path}中的costs.csv未找到匹配的目标文件名") # 按Week顺序输出处理结果 for week in sorted(final_results.keys()): print(f"===== Week {week} 数据 =====") print(final_results[week])
常见错误排查
- 缩进错误:确保
for循环内的数据处理代码缩进正确,避免因缩进层级错误导致数据被覆盖或逻辑跳过 - 文件名匹配逻辑:尽量用精确字符串比对,避免模糊匹配导致的误判,必要时用正则提取文件名的关键特征
- 排序遗漏:所有需要固定顺序的环节都要主动调用排序逻辑,包括原始CSV、文件夹列表、最终结果输出
内容的提问来源于stack exchange,提问作者JYB
相关产品推荐
相关产品推荐

