Python读取CSV文件报错_csv.Error: line contains NUL如何解决
问题根因
_csv.Error: line contains NUL 报错的触发条件是csv解析器读取的行中包含空字符(ASCII 0,转义表示为\x00),这类空字符通常是文件导出、传输过程中异常生成的,不属于编码问题,因此修改文件编码无法解决。
另外你的原代码存在逻辑问题:csv.reader是迭代对象,只能遍历一次,嵌套遍历reader会导致外层循环提前终止、行读取遗漏,也会影响最终统计结果。
修复方案
1. 读取时直接过滤空字符(无需修改原文件)
修改读取文件的逻辑,把读取到的内容里的空字符全部删掉再传给csv解析,同时修复原有逻辑问题,可直接运行的参考代码如下:
import csv covaxin = 0 covishield = 0 c1 = "Covaxin" c2 = "Covishield" a = "41 - 60 years" # 读文件时自动替换所有NUL空字符 with open("thefile.csv", 'r', encoding="ansi", errors="ignore") as f: # 把空字符全部替换为空,再按行拆分传给csv解析器 content = f.read().replace('\x00', '') reader = csv.reader(content.splitlines()) for row in reader: # 增加行长度校验,避免短行触发索引越界错误 if len(row) < 5: continue if row[3] == a: if row[4] == c1: covaxin += 1 print("Covaxin: ", covaxin) elif row[4] == c2: covishield += 1 print("Covishield:", covishield) else: print("error")
2. 手动清理原文件(可选)
如果需要修改原始csv文件消除空字符,可以用Notepad++打开thefile.csv,按Ctrl+F打开查找替换面板:
- 查找目标输入
\x00 - 替换为留空
- 查找模式选择「扩展(\n,\r,\t,\0,\x...)」
- 点击「全部替换」后保存文件即可
内容的提问来源于stack exchange,提问作者CodingPenguin
相关产品推荐
相关产品推荐

