You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSV文件处理报错求助:删除无效行、替换字符及编码转换

CSV文件处理问题解决指南

你在处理CSV文件时遇到两个典型报错,同时需要完成一系列格式转换需求:

  • 报错1:AttributeError: 'list' object has no attribute 'split'——错误原因是直接对列表调用了仅适用于字符串的split()方法
  • 报错2:ValueError: i/o operation on closed file.——错误原因是在with代码块外(文件已自动关闭)尝试遍历文件对象

你的核心需求:

  1. 删除前10行无数据内容
  2. 添加自定义新表头
  3. 将列分隔符从逗号,改为分号;
  4. 将所有连字符-替换为分号;
  5. 文件编码从utf-16转换为utf-8
  6. 生成新文件并保留有效内容

正确实现代码

import csv

# 定义需要删除的行号范围(前10行)
rownumbers_to_remove = set(range(1, 11))
processed_rows = []

# 读取utf-16编码的输入文件,处理数据
with open('input.csv', 'r', encoding="utf-16") as read_file:
    reader = csv.reader(read_file, delimiter=",")
    for row_number, row in enumerate(reader, start=1):
        # 跳过前10行无效内容
        if row_number in rownumbers_to_remove:
            continue
        # 遍历每个单元格,替换所有连字符为分号
        modified_row = [cell.replace('-', ';') for cell in row]
        processed_rows.append(modified_row)

# 写入utf-8编码的输出文件,使用分号作为列分隔符
with open('output.csv', 'w', newline='', encoding="utf-8") as write_file:
    writer = csv.writer(write_file, delimiter=";")
    # 写入自定义表头
    writer.writerow(['column1', 'column2', 'column3', 'column4', 'column5'])
    # 写入处理后的有效数据行
    writer.writerows(processed_rows)

代码关键说明

  • 删除前10行:通过enumerate给每行标记行号,直接跳过行号1到10的内容
  • 替换连字符:针对每行的每个字符串单元格执行replace操作,避免对列表直接调用字符串方法
  • 切换列分隔符:创建csv.writer时指定delimiter=";",自动用分号分隔列数据
  • 编码转换:读取时指定encoding="utf-16",写入时指定encoding="utf-8",完成编码转换
  • 避免文件关闭报错:所有文件操作都在with代码块内执行,确保文件对象在有效生命周期内使用
  • 添加新表头:在写入数据前,先通过writerow写入自定义的表头内容

内容的提问来源于stack exchange,提问作者gyuszmok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:23:11