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

Python实现TSV转CSV过程中触发UnicodeDecodeError的问题求助

报错核心原因

这个UnicodeDecodeError完全是编码不匹配导致的,和你的业务逻辑没关系:

  • Windows环境下Python 3打开文本文件时,默认会调用系统本地编码(也就是报错栈里的cp1252西欧字符集)来解析文件内容
  • 你要读取的TSV文件基本都是UTF-8编码(比如常用的IMDb公开TSV数据集默认就是UTF-8),里面包含cp1252无法识别的字节,解析到对应位置就直接抛错。
修复方法

不需要改动原有业务逻辑,只需要在两次open()调用里显式指定使用UTF-8编码读写即可,修改后的可直接运行的代码如下:

import csv

# 读取TSV,显式指定utf-8编码
with open("data.tsv", "r", encoding="utf-8") as titles:
    # TSV用制表符分隔,复用csv模块的解析逻辑
    reader = csv.DictReader(titles, delimiter="\t")

    # 写入CSV,同样指定utf-8编码,加newline=""避免Windows下出现多余空行
    with open("shows0.csv", "w", encoding="utf-8", newline="") as shows:
        writer = csv.writer(shows)
        # 写入需要的列头
        writer.writerow(["tconst", "primaryTitle", "startYear", "genres"])

        # 逐行过滤非成人的电视剧条目
        for row in reader:
            if row["titleType"] == "tvSeries" and row["isAdult"] == "0":
                writer.writerow([row["tconst"], row["primaryTitle"], row["startYear"], row["genres"]])

可选容错配置:如果不确定源文件的准确编码,可以在读文件时加上errors="replace"参数,遇到无法解码的字节会自动替换为占位符,不会直接中断程序,写法为:
open("data.tsv", "r", encoding="utf-8", errors="replace")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 16:06:04