如何在Python中读取99%为UTF-8编码的CSV文件?
解决UTF-8编码少量异常的CSV读取问题
针对你遇到的「文件主要是UTF-8编码,但存在少量无效字节导致读取失败」的问题,以下是几种实用解决方案:
方案1:读取时自动处理无效字节
直接在打开文件时指定errors参数,让Python自动处理无效的UTF-8字节:
忽略无效字节
如果可以接受丢失少量异常内容,用errors='ignore'跳过无效字节:
import csv with open('file.csv', mode='r', encoding='utf-8', errors='ignore') as f: reader = csv.DictReader(f) for row in reader: # 处理每一行数据 print(row)
用替换字符保留位置
如果不想丢失内容结构,用errors='replace'将无效字节替换为�占位符:
import csv with open('file.csv', mode='r', encoding='utf-8', errors='replace') as f: reader = csv.DictReader(f) for row in reader: # 处理每一行数据 print(row)
方案2:先修复文件编码再读取
如果需要彻底清理文件中的编码问题,可以先将文件转换为纯UTF-8格式,再进行读取:
import codecs import csv # 读取原文件并修复编码 with codecs.open('file.csv', 'r', encoding='utf-8', errors='ignore') as f_in: content = f_in.read() # 保存修复后的文件 with open('fixed_file.csv', 'w', encoding='utf-8') as f_out: f_out.write(content) # 读取修复后的文件 with open('fixed_file.csv', mode='r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: # 处理数据 print(row)
方案3:定位异常位置手动修正
如果需要精准定位问题并手动修正,可以先找到错误所在的行和位置:
import codecs line_num = 0 try: with codecs.open('file.csv', 'r', encoding='utf-8') as f: for line in f: line_num += 1 except UnicodeDecodeError as e: print(f"错误出现在第 {line_num} 行,字节位置 {e.start}") # 手动打开文件定位该行,修正无效字节后再读取
内容的提问来源于stack exchange,提问作者halloleo
相关产品推荐
相关产品推荐

