我有一个包含unicode字符的大型csv文件,这些字符会导致我尝试运行的Python脚本出错。到目前为止我删除它们的过程非常繁琐。我运行我的脚本,一旦它遇到一个unicode字符,我就会收到一个错误:
'ascii' codec can't encode character u'\xef' in position 197: ordinal not in range(128)
然后我谷歌你'\ xef'并尝试弄清楚角色究竟是什么(有没有人知道一个网站上有这些定义的列表?)。我正在使用该信息来构建字典,我有第二个Python脚本将unicode字符转换为常规文本:
unicode_dict = {"\xb0":"deg", "\xa0":" ", "\xbd":"1/2", "\xbc":"1/4", "\xb2":"^2", "\xbe":"3/4"}
for f in glob.glob(r"C:\Folder1\*.csv"):
in_csv = f
out_csv = f.replace(".csv", "_2.csv")
write_f=open(out_csv, "wb")
writer = csv.writer(write_f)
with open(in_csv,'rb') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
new_row = []
for s in row:
for k, v in unicode_dict.iteritems():
s = s.replace(k, v)
new_row.append(s)
writer.writerow(new_row)
write_f.close()
os.remove(in_csv)
os.rename(out_csv, in_csv)
然后我必须再次运行代码,得到另一个错误,并在Google上查找下一个unicode字符。必须有更好的方法,对吧?
答案 0 :(得分:3)
阅读http://www.joelonsoftware.com/articles/Unicode.html。小心。
然后,您了解您需要知道您的文件所在的编码。如果您已经能够找到\xbd
的含义,也许有些地方提到编码它的是什么。
然后,使用io.open(in_csv, 'rb', encoding='yourencodinghere')
代替香草open
来电。
然后,显然csv模块没有处理Unicode,感叹。使用SBillion的答案(例如http://www.joelonsoftware.com/articles/Unicode.html)来解决它。
答案 1 :(得分:1)
你应该看看这个用于通过标准python库在csv文件中通过utf-8处理Unicode的方法: https://docs.python.org/2/library/csv.html#csv-examples
但如果您愿意,可以使用这个符合外部unicode标准的模块:https://pypi.python.org/pypi/unicodecsv/0.9.0