Python处理CSV文件出现tuple拼接报错如何解决及优化代码?
问题解决
报错原因
- 变量名拼写错误:代码中定义的
surname、aSurname变量,后续调用时误写为surename、aSurename,首先会触发变量未定义的潜在错误。 - 核心报错原因:
value = aForename[i],",",aSurename[i],",",aScore[i]语句里用逗号分隔多个值,Python会默认将其封装为元组,后续执行value + '\n'相当于元组和字符串拼接,不符合语法规则,就是你看到的报错的直接来源。
优化方案
- 直接用Python内置的
csv模块处理CSV文件,避免手动拆分、拼接字符串可能出现的格式问题,比如字段内自带逗号的场景也能正常处理。 - 采用逐行读取、逐行校验、符合条件直接写入的逻辑,不需要把全量数据都加载到内存,大文件场景下内存占用和运行效率都更高,代码也更简洁。
- 校验逻辑优化:得分率超过80%等价于第三列分数大于160(满分200),直接用整数比较替代浮点运算,速度更快还能避免浮点计算误差。
修正后可运行代码
import csv # 用with语句自动管理文件句柄,不需要手动调用close with open('data.csv', 'r', encoding='utf-8') as read_f, open('revisedCSV.txt', 'w', encoding='utf-8', newline='') as write_f: csv_reader = csv.reader(read_f) csv_writer = csv.writer(write_f) # 如果你的CSV有表头,取消注释下面两行,实现表头同步写入 # header = next(csv_reader) # csv_writer.writerow(header) for row in csv_reader: # 校验第三列分数是否大于160(即得分率超80%) if int(row[2]) > 160: csv_writer.writerow(row)
内容的提问来源于stack exchange,提问作者b00bl0v3r
相关产品推荐
相关产品推荐

