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

如何使用csv.DictReader方法移除CSV文件中的NULL字节?

解决csv.DictReader读取文件时的"line contains NULL byte"错误

这个错误的根源是你的CSV文件里包含了NULL字节(\x00),而csv模块默认无法处理这种特殊字符。下面提供两种实用的解决方案,都是在DictReader处理文件前先过滤掉这些NULL字节:

方案1:逐行过滤NULL字节(适合大文件)

用生成器表达式逐行读取文件并移除NULL字节,这样不需要一次性加载整个文件,对大文件更友好:

import csv

framelist = []

with open('excelfile.csv', 'r', encoding="ISO-8859-1") as file:
    # 生成器逐行过滤NULL字节
    filtered_lines = (line.replace('\x00', '') for line in file)
    reader = csv.DictReader(filtered_lines, fieldnames=('BANK','IFSC', 'BRANCH', 'ADDRESS'))
    for row in reader:
        frame = {
            'bank': row['BANK'], 
            'ifsc': row['IFSC'], 
            'branch': row['BRANCH'], 
            'address': row['ADDRESS']
        }
        framelist.append(frame)

说明:

生成器filtered_lines会在每次读取一行内容时自动去掉其中的\x00字符,再把处理后的行传给DictReader,这样就能避免触发NULL字节的错误。

方案2:一次性清理全部内容(适合小文件)

如果你的CSV文件不大,可以一次性读取所有内容并清理NULL字节,再用StringIO模拟文件对象传给DictReader:

import csv
from io import StringIO

framelist = []

with open('excelfile.csv', 'r', encoding="ISO-8859-1") as file:
    # 读取全部内容并移除所有NULL字节
    cleaned_content = file.read().replace('\x00', '')
    # 用StringIO把字符串转为可读取的文件对象
    fake_file = StringIO(cleaned_content)
    reader = csv.DictReader(fake_file, fieldnames=('BANK','IFSC', 'BRANCH', 'ADDRESS'))
    for row in reader:
        frame = {
            'bank': row['BANK'], 
            'ifsc': row['IFSC'], 
            'branch': row['BRANCH'], 
            'address': row['ADDRESS']
        }
        framelist.append(frame)

说明:

这种方式更直观,一次性处理所有内容,但如果文件过大可能会占用较多内存,所以更适合小体积的CSV文件。

本质上,这两种方法都是在DictReader处理数据之前就把问题字符清理掉,因为csv模块本身没有内置参数来直接处理NULL字节,从输入源入手是最直接的解决思路。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:13:26