【发布时间】:2014-10-11 07:18:08
【问题描述】:
我正在使用 Python 2.7.5 并尝试获取现有的 CSV 文件并对其进行处理以删除大于 3 个字节的 unicode 字符。 (将此发送给 Mechanical Turk,这是亚马逊的限制。)
我尝试在这个问题 (How to filter (or replace) unicode characters that would take more than 3 bytes in UTF-8?) 中使用最高(惊人的)答案。我假设我可以逐行遍历 csv,并且无论我在哪里发现大于 3 个字节的 unicode 字符,都将它们替换为替换字符。
# -*- coding: utf-8 -*-
import csv
import re
re_pattern = re.compile(u'[^\u0000-\uD7FF\uE000-\uFFFF]', re.UNICODE)
ifile = open('sourcefile.csv', 'rU')
reader = csv.reader(ifile, dialect=csv.excel_tab)
ofile = open('outputfile.csv', 'wb')
writer = csv.writer(ofile, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)
#skip header row
next(reader, None)
for row in reader:
writer.writerow([re_pattern.sub(u'\uFFFD', unicode(c).encode('utf8')) for c in row])
ifile.close()
ofile.close()
我目前收到此错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xea in position 264: ordinal not in range(128)
所以这确实会正确地遍历某些行,但会在遇到奇怪的 unicode 字符时停止。
我真的很感激一些指点;我完全糊涂了。我已将 'utf8' 替换为 'latin1' 和 unicode(c).encode 为 unicode(c).decode ,但我一直收到同样的错误。
【问题讨论】:
-
向我们展示一些示例输入。