将CSV中的Unicode转换为纯文本的最佳方式?

4 投票
2 回答
1626 浏览
提问于 2025-04-18 04:55

我有一个很大的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 个回答

1

你可以看看这个链接,里面有关于如何在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

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)来解决这个问题。

撰写回答