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

Python处理900万行CSV时遇Unicode编码及转义错误求助

解决Python处理大CSV文件时的Unicode编码/解码错误

我来帮你搞定这个编码问题,都是实际处理超大CSV时踩过的坑,分点给你讲清楚:

先搞懂两个错误的本质

  • UnicodeEncodeError:这个报错是因为你在输出(打印、写入文件)时用了系统默认的charmap编码(Windows下通常是cp1252),而字符é(十六进制转义是\xe9)不在这个编码的字符集里,所以没法编码输出。
  • SyntaxError(truncated \xXX escape):你直接敲print('\xe')报错是因为\x是十六进制转义符,后面必须跟两位十六进制数字,\xe是不完整的转义序列,正确的写法应该是print('\xe9')才能打出é。

处理900万行CSV的编码解决方案

因为是超大文件,要避免一次性加载全部内容到内存,推荐逐行处理:

1. 读取文件时指定正确编码

首先确定你的CSV文件实际编码(常见的是UTF-8),读取时显式指定:

import csv

# 用utf-8编码读取大CSV,逐行处理
with open('your_large_file.csv', 'r', encoding='utf-8') as input_file:
    csv_reader = csv.reader(input_file)
    for row in csv_reader:
        # 这里处理每行数据,比如提取字段、清洗等
        pass

2. 输出时避免编码错误

如果是写入新文件或者打印到控制台时出错,同样要显式指定UTF-8编码:

  • 写入文件示例:
with open('output_file.csv', 'w', encoding='utf-8', newline='') as output_file:
    csv_writer = csv.writer(output_file)
    # 先写入表头(如果需要)
    csv_writer.writerow(['列1', '列2', '列3'])
    # 再逐行写入处理后的数据
    for row in csv_reader:
        csv_writer.writerow(row)
  • 控制台打印解决(Windows常见问题):
    Windows控制台默认编码不是UTF-8,可能导致打印UTF-8字符报错,两种解决方法:
# 方法1:重新配置stdout编码为UTF-8
import sys
sys.stdout.reconfigure(encoding='utf-8')

# 方法2:手动编码后打印(适合临时调试)
print(row[0].encode('utf-8').decode('utf-8'))

3. 不确定文件编码?用chardet检测

如果不知道CSV用的是什么编码,可以用chardet库检测(先pip install chardet):

import chardet

# 只读前10KB内容检测,避免加载大文件占内存
with open('your_large_file.csv', 'rb') as f:
    raw_data = f.read(10000)
    encoding_result = chardet.detect(raw_data)
    print(f"检测到文件编码:{encoding_result['encoding']}")

检测结果比如是utf-8、cp1252或者gbk,读取时用这个编码就行。

4. 特殊情况:无法编码的字符处理

如果确实有一些无法用目标编码表示的字符,可以在写入/打印时添加errors参数兜底(不推荐,优先用正确编码):

# 用?替换无法编码的字符
with open('output.csv', 'w', encoding='utf-8', errors='replace', newline='') as f:
    csv_writer = csv.writer(f)
    # ...写入逻辑

内容的提问来源于stack exchange,提问作者Alaa M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:54:59