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
相关产品推荐
相关产品推荐

