将CSV中的Unicode转换为纯文本的最佳方式?
我有一个很大的csv文件,里面包含一些unicode字符,这些字符在我运行的Python脚本中导致了错误。到目前为止,我处理这些字符的过程非常繁琐。我运行我的脚本,一旦遇到unicode字符,就会报错:
'ascii' codec can't encode character u'\xef' in position 197: ordinal not in range(128)
然后我在网上搜索u'\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)
接着我又得重新运行代码,遇到另一个错误,然后再去谷歌上查下一个unicode字符。总得有更好的办法吧?
2 个回答
你可以看看这个链接,里面有关于如何在CSV文件中通过utf-8处理Unicode的内容,使用的是标准的Python库:https://docs.python.org/2/library/csv.html#csv-examples
不过如果你更喜欢的话,也可以使用这个外部的支持Unicode的模块:https://pypi.python.org/pypi/unicodecsv/0.9.0
先去看看这个链接: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)来解决这个问题。