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

使用for循环读取CSV指定顺序文件时出现顺序错乱问题

解决os.walk遍历顺序混乱&按Week处理数据的问题

问题根源

  1. os.walk返回的文件/目录顺序由操作系统底层存储逻辑决定,并非按名称/数字排序,导致每次运行顺序不一致
  2. 未提前按Week对原始CSV数据做排序处理,后续匹配时没有明确的处理基准
  3. 文件名匹配逻辑可能存在疏漏,导致读取了错误的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:06:16