将csv中的unicode转换为纯文本的最佳方法?

时间:2014-04-30 19:04:04

标签: python csv dictionary unicode

我有一个包含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字符。必须有更好的方法,对吧?

2 个答案:

答案 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