Python抽认卡开发:CSV导入列表项与输入if比对始终返回错误
核心问题定位
- 逐行读取时残留不可见换行符:用open()直接逐行读文件时,每行结尾的换行符(
\n或Windows环境下的\r\n)会被并入字符串内容。你用逗号拆分后,存储到A列表里的答案末尾会自带这个看不见的换行符,和用户输入的无换行内容永远匹配不上。你测试用硬编码的"1"时没有多余字符,因此比对可以正常运行。 - 原生逗号拆分的额外风险:如果CSV内的问题或答案本身包含逗号,直接用
split(",")会出现拆分错位,不过你当前遇到的比对错误优先由换行符问题导致。
可落地修复方案
- 第一优先级先清理行首尾字符:在循环读取每行时,先处理掉行尾的换行符,再做拆分,修改后的读取代码如下:
如果需要保留答案首尾的有效空格,可以将with open("List_Questions_Answers.csv", "r", encoding="utf-8") as data: Q = [] A = [] next(data) for line in data: line = line.strip() q, a = line.split(",") Q.append(q) A.append(a)line.strip()替换为line.rstrip("\r\n"),仅清理行尾的换行符,不改动其他内容 - 更稳妥的CSV处理方式:直接使用Python内置的
csv模块,自动兼容CSV标准格式(自动处理字段内逗号、引号、换行等问题),不会出现多余字符残留,示例代码:import csv Q = [] A = [] with open("List_Questions_Answers.csv", "r", encoding="utf-8") as data: reader = csv.reader(data) next(reader) # 跳过表头 for row in reader: Q.append(row[0]) A.append(row[1]) - 快速定位验证:如果想快速确认问题,可以在比对逻辑前打印
repr(A[1]),即可看到A[1]字符串中包含的所有不可见特殊字符,直接验证问题原因。
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

