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

Python实现输入CSV数据匹配对应输出文件夹的技术求助

Python实现CSV数据按分类变量路由到对应文件夹

1. 先装必要的库

打开命令提示符(Windows)或终端(Mac/Linux),输入下面的命令安装pandas(处理CSV的实用工具,新手友好):

pip install pandas

2. 复制代码到.py文件

比如命名为route_data.py,和你的input.csv、lookup.csv放在同一个文件夹里:

import pandas as pd
import os

# 读取匹配规则表,生成"分类组合→文件夹"的映射字典
lookup_table = pd.read_csv('lookup.csv')
folder_map = {
    (row.dwelling, row.wall, row.weather, row.occ): row.folder
    for _, row in lookup_table.iterrows()
}

# 分块读取大文件,每块1000行(内存充足的话可以调大,比如5000)
chunk_size = 1000
for data_chunk in pd.read_csv('input.csv', chunksize=chunk_size):
    # 遍历每一行数据
    for _, single_row in data_chunk.iterrows():
        # 提取当前行的分类变量组合
        key = (single_row.dwelling, single_row.wall, single_row.weather, single_row.occ)
        # 找到对应的文件夹名
        target_folder = folder_map.get(key)
        
        if target_folder:
            # 自动创建文件夹(已存在的话不会报错)
            os.makedirs(target_folder, exist_ok=True)
            # 把当前行转成小DataFrame,追加到目标文件夹的output.csv里
            row_to_save = pd.DataFrame([single_row])
            # 第一次写入时加表头,之后追加不加
            has_header = not os.path.exists(f"{target_folder}/output.csv")
            row_to_save.to_csv(f"{target_folder}/output.csv", mode='a', header=has_header, index=False)
        else:
            # 没有匹配到的行,统一存到unmatched文件夹
            os.makedirs('unmatched', exist_ok=True)
            row_to_save = pd.DataFrame([single_row])
            has_header = not os.path.exists("unmatched/output.csv")
            row_to_save.to_csv("unmatched/output.csv", mode='a', header=has_header, index=False)

3. 运行代码

打开命令行,切换到文件所在的文件夹,输入:

python route_data.py

关键说明

  • 分块读取:50万行数据一次性加载可能占满内存,用chunksize分块读,避免程序卡死
  • 自动建文件夹:无需手动提前创建目标文件夹,代码会自动生成
  • 表头处理:每个文件夹下的output.csv只会在第一次写入时添加表头,后续追加数据不会重复写入表头
  • 异常处理:没有匹配到分类组合的行会被统一存到unmatched文件夹,方便后续排查问题

内容的提问来源于stack exchange,提问作者Loz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:10:45