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
相关产品推荐
相关产品推荐

