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
相关产品推荐
相关产品推荐

