寻找可批量处理CSV、新增空列及固定值列的高效工具
解决方案
方案1:纯csvkit实现(无需额外编码,适合直接套用规则)
你可以组合csvkit的内置命令实现全部需求,不需要额外开发:
- 第一步:从源CSV提取需要映射的列并调整顺序
按照你的映射规则,先提取对应列生成中间文件:csvcut -c 3,2,18 源文件.csv > 提取列中间文件.csv
你有其他映射规则的话,直接调整-c后面的列号顺序即可。 - 第二步:生成包含固定值的辅助列文件
生成全量填充MS的Title列文件:seq $(wc -l < 源文件.csv) | sed '1s/.*/Title\nMS/' | sed '2,$s/.*/MS/' > title列.csv
生成全为空值的Date Set列文件:seq $(wc -l < 源文件.csv) | sed '1s/.*/Date Set\n/' | sed '2,$s/.*//' > 日期列.csv - 第三步:按顺序拼接所有列得到最终文件
csvjoin --no-inference title列.csv 提取列中间文件.csv 日期列.csv | csvcut -c 1,2,3,4,5 > 最终输出文件.csv - 要定期执行的话,把上述命令整理为shell脚本(Windows系统写bat脚本),添加到系统定时任务即可。
方案2:轻量Python脚本实现(规则调整更灵活,适合长期使用)
如果映射规则会频繁变动,建议写短脚本实现,维护成本比串命令更低:
import csv # 配置区,修改规则只需要调整以下参数即可 SOURCE_FILE = "你的源文件路径.csv" OUTPUT_FILE = "你的输出文件路径.csv" # 新列对应源列的索引(从0开始计数,固定值/空值列填None) COLUMN_MAPPING = [None, 2, 1, None, 17] # 固定值列配置:键为新列索引,值为填充内容 FIXED_VALUE_COLS = {0: "MS"} # 空值列配置:填入新列的索引即可 EMPTY_COLS = [3] # 新文件表头,按顺序填写 NEW_HEADERS = ["Title", "列2自定义表头", "列3自定义表头", "Date Set", "列5自定义表头"] with open(SOURCE_FILE, 'r', encoding='utf-8') as f_in, open(OUTPUT_FILE, 'w', encoding='utf-8', newline='') as f_out: reader = csv.reader(f_in) writer = csv.writer(f_out) # 写入新表头 writer.writerow(NEW_HEADERS) # 跳过源文件表头 next(reader) for row in reader: new_row = [] for col_idx in range(len(NEW_HEADERS)): if col_idx in FIXED_VALUE_COLS: new_row.append(FIXED_VALUE_COLS[col_idx]) elif col_idx in EMPTY_COLS: new_row.append("") else: new_row.append(row[COLUMN_MAPPING[col_idx]]) writer.writerow(new_row)
- 定期执行直接把脚本添加到系统定时任务(Windows任务计划、Linux crontab均可支持),一次配置即可自动运行。
内容的提问来源于stack exchange,提问作者finch
相关产品推荐
相关产品推荐

