我试图在python中使用xlrd
从excel文件中读取一些数据。有些单元格包含sigma,Pi等特殊字符;但是xlrd
给了我UnicodeEncodeError
。
这是我的excel文件:
这是我使用的代码:
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)
我该怎么办?
答案 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')})