Python读取含韩文与数字的CSV文件时遇编码及空字节错误求助
解决读取含韩文CSV时的NULL Byte错误
嘿,我来帮你搞定这个读取CSV时遇到的NULL byte问题!你已经解决了Unicode解码的问题,但NULL字节确实是CSV读取时常见的坑,咱们一步步来处理:
原因分析
NULL字节(\0)通常是文件本身包含无效数据,或者编码转换时产生的冗余字符,csv模块默认不处理这种字符,所以会触发报错。
方案1:过滤NULL字节后读取(适合小文件)
先读取整个文件内容,替换掉所有NULL字节,再传给csv.reader处理:
import csv import codecs with codecs.open('1.csv', 'rU', 'utf-16') as f: # 读取全部内容并移除NULL字节 cleaned_content = f.read().replace('\0', '') # 按行分割后生成csv读取器 csvreader = csv.reader(cleaned_content.splitlines()) for row in csvreader: print(row)
方案2:逐行过滤NULL字节(适合大文件,内存友好)
如果你的CSV文件很大,用生成器逐行处理更高效,同时直接用Python3的open指定编码更简洁:
import csv with open('1.csv', 'r', encoding='utf-16') as f: # 用生成器逐行过滤NULL字节 filtered_lines = (line.replace('\0', '') for line in f) csvreader = csv.reader(filtered_lines) for row in csvreader: print(row)
额外建议:确认文件实际编码
有时候你以为是utf-16,但可能是带BOM的utf-16-le/be,或者其他编码。可以用chardet库检测真实编码:
- 先安装chardet:
pip install chardet - 检测编码:
import chardet with open('1.csv', 'rb') as f: encoding_result = chardet.detect(f.read()) print(f"文件实际编码可能是:{encoding_result['encoding']}")
把检测到的编码替换到代码里,能避免很多编码相关的隐性问题。
内容的提问来源于stack exchange,提问作者Py11
相关产品推荐
相关产品推荐

