读取excel文件时编码错误

时间:2013-07-13 05:10:51

标签: python encoding utf-8 ascii

我想查看我的文件夹中的数据,识别它们并根据我在Excel电子表格中的规则列表重命名它们 我加载了所需的库, 我使我的目录成为工作目录; 我读了xcel文件(使用xlrd) 当我尝试按列读取数据时,例如:

fname = metadata.col_values(0, start_rowx=1, end_rowx=None)

值列表在它们前面带有u - 我想unicode - 例如: fname = [u'file1',u'file2']等等

如何将fname转换为ascii字符串列表?

2 个答案:

答案 0 :(得分:0)

我不确定拥有unicode文件名的大问题是什么,但假设你的所有字符都是ascii有效字符,下面应该这样做。这个解决方案只会忽略任何非ascii,但是值得思考你为什么要这样做:

ascii_string = unicode_string.encode("ascii", "ignore")

具体来说,为了转换整个列表,我会使用列表理解:

ascii_list = [old_string.encode("ascii", "ignore") for old_string in fname]

答案 1 :(得分:0)

前面的u只是一个可视项目,可以在您打印字符串时向您显示底层表示。就像打印该列表时字符串周围的单引号一样 - 它们可以显示有关正在打印的对象的内容(具体来说,它是一个字符串),但它们实际上并不是对象的一部分。

u的情况下,它说它是一个unicode对象。当您在内部使用字符串时,外部的u不存在,就像单引号一样。尝试打开一个文件并在那里写字符串,你会看到u和单引号没有显示,因为它们实际上并不是底层字符串对象的一部分。

with open(r'C:\test\foo.bar', 'w') as f:
    for item in fname:
        f.write(item)
        f.write('\n')

如果你真的需要在开始时没有u打印字符串,你可以用u'unicode stuff'.encode('ascii')将它们转换为ASCII,但老实说,我怀疑这对你正在做什么很重要

您也可以使用Python 3,其中Unicode是默认值,而u通常不会打印。