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

Python读取含NUL字段的CSV文件触发_csv.Error报错问题咨询

报错原因
  1. Python标准库的csv模块原生不允许解析内容中包含ASCII 0值的NUL空字符,只要输入数据中存在该字符,就会直接抛出_csv.Error: line contains NUL异常。
  2. 外部交付的文件携带NUL字符通常是生成端的导出逻辑异常、跨系统传输时的字节错误、或者生成文件的编码与你读取时指定的编码不匹配导致的。
  3. 用Windows记事本打开再保存后报错消失,是因为Windows记事本在写入文件时会自动清理内容中的所有NUL空字符,重新保存后的文件已经不存在触发报错的异常字符。
解决方案

根据你的文件大小和使用场景,可以选择以下任意一种处理方案:

  • 小文件快速处理:直接读取全量文件内容过滤NUL字符后再传给csv解析器,代码修改如下:
import csv
from io import StringIO

def csvReader(filename):
    with open(filename, 'r', encoding='utf-8', newline='') as f:
        # 替换所有NUL空字符
        file_content = f.read().replace('\0', '')
    return csv.reader(StringIO(file_content))

for row in csvReader('test.csv'):
    print(row)
  • 大文件低内存占用处理:逐行过滤后再解析,避免全量文件加载到内存:
import csv

def csvReader(filename):
    with open(filename, 'r', encoding='utf-8', newline='') as f:
        for line in f:
            yield line.replace('\0', '')

reader = csv.reader(csvReader('test.csv'))
for row in reader:
    print(row)
  • 高频处理脏数据场景:可以使用容错性更高的第三方数据处理库,比如pandas,无需自行处理字符过滤逻辑:
import pandas as pd
# 读取时自动兼容异常字符,on_bad_lines参数可根据需求调整为跳过/警告/报错
df = pd.read_csv('test.csv', encoding='utf-8', on_bad_lines='warn')
# 逐行遍历输出
for row in df.itertuples(index=False):
    print(list(row))

补充说明:如果过滤NUL后解析出的字段内容存在乱码,建议先确认原文件的实际编码,将encoding参数修改为对应编码(比如gbk、utf-16)后再尝试解析,部分编码不匹配的场景也会生成异常的NUL字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 15:48:03