Python中如何基于分隔符拆分CSV指定列生成两行并新增标识列
CSV拆分处理实现方法
以下两种方法都可以实现你要的C列对半拆分、拆行加E列标记的效果,按需选择即可。
方法1:Python脚本(无额外依赖,全平台通用)
用Python自带的csv标准库处理,不需要安装第三方包,自动适配CSV格式转义问题,逻辑稳定:
import csv # 把这里的文件名改成你自己的输入输出文件路径 input_file = "input.csv" output_file = "output.csv" with open(input_file, "r", newline="", encoding="utf-8") as f_in, \ open(output_file, "w", newline="", encoding="utf-8") as f_out: csv_reader = csv.DictReader(f_in) # 表头新增E列 csv_writer = csv.DictWriter(f_out, fieldnames=csv_reader.fieldnames + ["E"]) csv_writer.writeheader() for line in csv_reader: # 拆分C列竖线分隔的内容,过滤开头|分割出的空值 c_items = [item for item in line["C"].split("|") if item] mid_pos = len(c_items) // 2 # 拼回原格式的前后两段C列内容 c_part1 = "|" + "|".join(c_items[:mid_pos]) c_part2 = "|" + "|".join(c_items[mid_pos:]) # 写入前半段行,E=0 line["C"] = c_part1 line["E"] = "0" csv_writer.writerow(line) # 写入后半段行,E=1 line["C"] = c_part2 line["E"] = "1" csv_writer.writerow(line)
用你提供的示例输入运行后,输出内容完全匹配预期:
A,B,C,D,E 1,2,|3|4|5,9,0 1,2,|6|7|8,9,1 11,12,|13|14|15,19,0 11,12,|16|17|18,19,1
只要C列竖线分隔的元素总数为偶数,不需要硬编码长度,脚本会自动找中间点拆分。
方法2:awk命令(适合Linux/macOS终端快速处理)
如果习惯用命令行工具,直接执行下面的awk命令即可直接生成结果文件:
awk 'BEGIN{FS=OFS=","} NR==1 {print $0,"E"; next} { split($3, c_arr, "|") item_count = 0 for (i in c_arr) if (c_arr[i] != "") item_count++ mid = item_count / 2 c1 = "|"; c2 = "|"; count = 0 for (i=2; i<=length(c_arr); i++) { count++ if (count <= mid) { c1 = c1 (count>1 ? "|" : "") c_arr[i] } else { c2 = c2 (count>mid+1 ? "|" : "") c_arr[i] } } $3 = c1 print $0,"0" $3 = c2 print $0,"1" }' input.csv > output.csv
提示:如果你的C列拆分元素总数是奇数,可以调整取中间位置的逻辑(比如向上/向下取整)适配业务需求。
内容的提问来源于stack exchange,提问作者user1546610
相关产品推荐
相关产品推荐

