如何使用Python将CSV文件单列按分号拆分为两列并保存
实现逻辑
- 第一步:先读取CSV表头行,定位
programme列对应的索引位置,同时给新表新增两个表头program 1、program 2,替换掉原来的programme表头。 - 第二步:逐行读取CSV内容,取出
programme列的原值,用split(';')方法按分号拆分,加maxsplit=1参数控制最多只拆1次,避免列内有多个分号导致拆分出错,拆分后可以用strip()去除值前后的多余空格。 - 第三步:把拆分后的两个值替换原行中
programme列的位置,拼接成新行后写入新CSV文件即可。
完整可运行代码
import csv programme_col_idx = None new_header = [] with open('IMI.csv', 'r', encoding='utf-8') as csv_file: csv_reader = csv.reader(csv_file) # 读取表头定位programme列位置 header = next(csv_reader) for idx, col_name in enumerate(header): if col_name == 'programme': programme_col_idx = idx new_header.extend(['program 1', 'program 2']) else: new_header.append(col_name) if programme_col_idx is None: raise ValueError("未在CSV中找到programme列,请检查文件表头是否正确") with open('new_IMI.csv', 'w', encoding='utf-8', newline='') as new_file: # 若需要常规逗号分隔的CSV,可将delimiter参数改为',' csv_writer = csv.writer(new_file, delimiter='\t') # 写入新表头 csv_writer.writerow(new_header) # 逐行处理内容 for line in csv_reader: programme_val = line[programme_col_idx] p1, p2 = programme_val.split(';', maxsplit=1) # 清理值前后的空格 p1 = p1.strip() p2 = p2.strip() # 拼接生成新行 new_line = line[:programme_col_idx] + [p1, p2] + line[programme_col_idx+1:] csv_writer.writerow(new_line)
注意事项
- 如果你的CSV没有表头、第一行就是内容,可直接手动指定
programme_col_idx为对应列的序号(列从左到右从0开始计数),删除表头处理的相关代码即可。 - 写入时加
newline=''是Python csv模块的规范写法,可以避免Windows系统下生成的CSV出现多余空行的问题。
内容的提问来源于stack exchange,提问作者AhlemMustapha
相关产品推荐
相关产品推荐

