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

AWS SageMaker JupyterLab中txt追加写入后pandas CSV解析异常报错

问题根因

  1. 你使用追加模式(a)打开classes.txt,且写入标签时没有添加换行符:代码中classes.write(uni_label)写入的Organisation\tUniversity末尾无换行,每次运行代码时新的标签内容会直接拼接在上一次写入的内容末尾,导致单行的制表符数量不断增加,字段数随运行次数递增,最终触发Expected 2 fields in line 50, saw 9报错。
  2. 业务逻辑冗余:University标签已经存在于classes.txt中,无需每次运行代码都重复追加,重复写入也会导致标签映射重复。

修复方案

第一步:修复已损坏的标签文件

手动打开classes.txt,删除末尾拼接的所有重复标签行,确保每一行仅含1个制表符、2个字段。

第二步:修改代码逻辑

修改写入classes.txt的逻辑,增加存在性判断,同时补充换行符,示例代码如下:

import os
import random

# 提前判断标签是否已存在,避免重复写入
uni_label = 'Organisation\tUniversity'
label_exist = False
if os.path.exists('classes.txt'):
    with open('classes.txt', 'r', encoding='utf-8') as f:
        for line in f:
            if line.strip() == uni_label:
                label_exist = True
                break

# 仅标签不存在时才追加,且写入时补充换行符
if not label_exist:
    with open('classes.txt', 'a', encoding='utf-8') as classes:
        classes.write(f"{uni_label}\n")

# 训练集验证集写入逻辑可根据业务需求选择是否保留追加模式
train = open('train_textcorrupted.csv', 'a')
val = open('val.csv', 'a')
n_pad = 4
for i in range(len(unis)-n_pad):
    record = ' '.join(unis[i:(i+n_pad)])
    full_record = f'{uni_label}\t{record}\n'
    if random.random() > 0.9:
        val.write(full_record)
    else:
        train.write(full_record) 

val.close()
train.close()

可选兜底方案

如果后续仍可能出现格式异常的行,可在pandas读取classes.txt时增加跳过错误行的参数,避免直接报错终止运行:

# pandas 1.3+ 版本使用
self._raw_labels = pd.read_csv(classes_file, header=None, sep='\t', on_bad_lines='skip')
# 旧版本pandas使用
self._raw_labels = pd.read_csv(classes_file, header=None, sep='\t', error_bad_lines=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:39:03