Python XLRD模块为某些ASCII字符提供ValueError

时间:2014-06-24 12:52:26

标签: python ascii xlrd

我试图在python中使用xlrd从excel文件中读取一些数据。有些单元格包含sigma,Pi等特殊字符;但是xlrd给了我UnicodeEncodeError

这是我的excel文件:

enter image description here

这是我使用的代码:

import xlrd
if __name__ == '__main__':
    wb = xlrd.open_workbook('test.xlsx')
    s = wb.sheet_by_name('test')
    for row in range(1, s.nrows):
        values = {}
        for column in range(s.ncols):
            values.update({s.cell(0, column).value: str(s.cell(row, column).value)})    
            print values

这是输出:

{u'formula': 'a + b * 15', u'name': 'test1'}
Traceback (most recent call last):
  File ".\testXLRD.py", line 21, in <module>
    values.update({s.cell(0, column).value: str(s.cell(row, column).value)})
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2211' in position 0: ordinal not in range(128)

我该怎么办?

1 个答案:

答案 0 :(得分:0)

正如Mathias所说,str()强制转换是失败的,因为它试图在ascii中解码一个unicode字符串u'\u2211',而它应该使用例如'utf-8'。

由于s.cell(row, column)返回a float, an int or some unicode string,您最好不要在操作时更改格式或转换unicode中的所有内容:

values.update({s.cell(0, column).value: unicode(s.cell(row, column).value)})

如果你真的想要一个字符串,而不是unicode,这应该可行:

values.update({s.cell(0, column).value: unicode(s.cell(row, column).value).encode('utf-8')})