如何用Python的csvReader拆分CSV单元格中|分隔内容为多列?
解决方案:拆分CSV中指定列的多值内容为独立列
没问题,我来帮你搞定这个需求!用Python标准库的csv模块就能轻松实现,步骤清晰且容易理解:
核心思路
- 读取原CSV的每一行数据,定位到第3列(注意Python索引从0开始,对应索引
2) - 用
split('|')把该列的内容拆分成列表 - 为保证新CSV列数统一,把拆分后的列表补全到5个元素(不足的用空字符串填充)
- 修改表头,将原来的目标列替换为5个新列名(比如原列名为
transport,则改为transport_1到transport_5) - 将处理后的数据写入新CSV文件
完整代码示例
import csv # 替换成你实际的文件路径 input_file = 'input.csv' output_file = 'output.csv' # 目标列是第3列,对应索引2 target_col_index = 2 with open(input_file, 'r', newline='', encoding='utf-8') as infile, \ open(output_file, 'w', newline='', encoding='utf-8') as outfile: reader = csv.reader(infile) writer = csv.writer(outfile) # 处理表头:替换目标列为拆分后的新列 header = next(reader) target_col_name = header.pop(target_col_index) new_columns = [f"{target_col_name}_{i+1}" for i in range(5)] header[target_col_index:target_col_index] = new_columns writer.writerow(header) # 逐行处理数据 for row in reader: # 拆分目标列内容 target_values = row[target_col_index].split('|') # 补全到5个元素,避免列数不一致 target_values = target_values.ljust(5, '') # 替换原列内容为拆分后的列表 row.pop(target_col_index) row[target_col_index:target_col_index] = target_values writer.writerow(row) print("处理完成!新CSV文件已生成。")
代码说明
- 文件路径:记得把
input.csv和output.csv替换成你实际的文件路径 - 目标列索引:如果你的第3列索引不是2(比如CSV有特殊格式),直接调整
target_col_index的值即可 - 补全元素:用
ljust(5, '')确保不管拆分出1-5个值,都能对应5列,避免写入时列数混乱 - 编码设置:添加
encoding='utf-8'是为了兼容中文等非ASCII字符,防止出现乱码
可选调整
如果你想保留原目标列,只在后面追加拆分后的列,可以修改表头和行处理逻辑:
# 处理表头:把新列追加到末尾 header.extend(new_columns) writer.writerow(header) # 处理每一行:把拆分后的值追加到行末尾 row.extend(target_values) writer.writerow(row)
这样原列会被保留,拆分后的5列会加到CSV的最后面。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

