【问题标题】:encoding error when reading excel file [duplicate]读取excel文件时出现编码错误[重复]
【发布时间】:2013-07-11 17:17:11
【问题描述】:

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

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

值列表前面带有 u - 我猜是 unicode - 例如: fname = [u'file1', u'file2'] 以此类推

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

【问题讨论】:

  • 如果字符串是 unicode 有什么大不了的?
  • 感谢 cmets / 建议;我不确定 unicode 是否是问题,但我认为这是问题所在,因为代码无法识别我文件夹中的 file1、file2 等——我相信错误是存在 u

标签: python encoding utf-8 ascii


【解决方案1】:

我不确定拥有 unicode 文件名背后的大问题是什么,但假设您的所有字符都是 ascii 有效字符,那么下面应该这样做。该解决方案将忽略任何非 ascii 的内容,但值得考虑一下您首先要这样做的原因:

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

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

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

【讨论】:

  • 谢谢 - 可能你是对的,unicode 不是代码的问题;我将测试并更新代码 - 我将发布结果
【解决方案2】:

前面的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 通常不会打印。

【讨论】:

  • 谢谢 - 我现在相信 unicode 可能不是我的问题;我会尽快更新帖子
  • 如果item 是包含ascii (sys.getdefaultencoding()) 之外的字符的Unicode 字符串,则f.write(item) 失败。请改用带有显式字符编码的codecs.open()
猜你喜欢
  • 2021-02-02
  • 1970-01-01
  • 2015-03-06
  • 2014-01-12
  • 2018-03-11
  • 2013-03-27
  • 2018-06-27
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多