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

Python学生CSV数据校验脚本问题:整行输出失效求助

解决CSV数据校验时整行存储问题

问题核心

你当前的问题出在处理数据时只保留了拆分后的字段,没存原始整行文本,导致输出时变成单个字段而非完整行。解决的关键是读取每行时先保留原始字符串,再拆分字段做校验。

具体实现方案

直接上可运行的修正代码,附带注释说明关键逻辑:

def validate_data(fields):
    errors = []
    # 这里替换成你的实际校验规则,示例规则参考:
    # 假设CSV字段为[学号, 姓名, 年龄, 班级]
    if len(fields) != 4:
        errors.append("字段数量不符")
    if not fields[0].strip().isdigit():
        errors.append("学号必须为数字")
    if fields[2].strip():
        if not fields[2].strip().isdigit() or int(fields[2]) not in range(10, 20):
            errors.append("年龄必须是10-19之间的整数")
    else:
        errors.append("年龄不能为空")
    return errors

valid_lines = []
corrupt_lines = []

# 读取文件时保留原始行
with open("students.csv", "r", encoding="utf-8") as f:
    # 处理表头(如果不需要表头可跳过这两行)
    header = f.readline().rstrip("\n")
    valid_lines.append(header)
    
    # 逐行处理数据行
    for line_num, raw_line in enumerate(f, start=2):
        raw_line = raw_line.rstrip("\n")  # 保留原行格式,仅去掉末尾换行符
        fields = raw_line.split(",")  # 拆分字段用于校验,不影响原行存储
        error_list = validate_data(fields)
        
        if not error_list:
            # 有效行直接存入原始整行
            valid_lines.append(raw_line)
        else:
            # 无效行按要求格式拼接:原行 + 错误列表
            corrupt_entry = f"{raw_line} | 错误字段: {', '.join(error_list)}"
            corrupt_lines.append(corrupt_entry)

# 输出结果
print("=== 有效数据 ===")
for line in valid_lines:
    print(line)

print("\n=== 无效数据 ===")
for line in corrupt_lines:
    print(line)

关键细节说明

  • 读取文件时直接用raw_line存储原始整行,拆分字段仅用于校验逻辑,不改变存储的内容
  • 校验函数返回错误列表,根据列表是否为空判断行的有效性
  • 无效行严格按照要求的格式拼接原行和错误信息后存入corrupt_lines

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:01:05