[英]Python 2: ASCII issue when writing in Excel files
Problem sketch: 问题草图:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)
I'm trying to write a simple python program that can auto-complete the blank units with data appeared in the same column above. 我正在尝试编写一个简单的python程序,该程序可以自动完成空白单元的数据,这些数据出现在以上同一列中。
Since there're Chinese characters in the file, I've thought of the issue of ASCII, so I tried to change it into UTF-8. 由于文件中包含中文字符,因此我想到了ASCII的问题,因此我尝试将其更改为UTF-8。
Codes shown below: 代码如下所示:
#!/usr/bin/python
# -*- coding:utf-8 -*-
from xlrd import open_workbook
from xlwt import Workbook
from xlutils.copy import copy
rb = open_workbook('data.xls', 'utf-8')
wb = copy(rb)
sh = wb.get_sheet(0)
s = rb.sheet_by_index(0)
cols = s.ncols
rows = s.nrows
temp = 0
for cx in range(cols):
for rx in range(rows):
if s.cell_value(rowx = rx, colx = cx).encode('utf-8') != "":
temp = s.cell_value(rowx = rx, colx = cx).encode('utf-8')
print(temp) #to verify
else:
sh.write(rx, cx, temp)
wb.save('data.xls')
However, the issue still happened. 但是,问题仍然发生。 Result in terminal: 结果在终端:
ZishengdeMacBook-Pro:Downloads zisheng$ python form.py
(printed result ignored, and it looked good)
Traceback (most recent call last):
File "form.py", line 41, in <module>
wb.save('data.xls')
File "/Users/zisheng/anaconda/lib/python2.7/site-packages/xlwt/Workbook.py", line 710, in save
doc.save(filename_or_stream, self.get_biff_data())
File "/Users/zisheng/anaconda/lib/python2.7/site-packages/xlwt/Workbook.py", line 674, in get_biff_data
shared_str_table = self.__sst_rec()
File "/Users/zisheng/anaconda/lib/python2.7/site-packages/xlwt/Workbook.py", line 636, in __sst_rec
return self.__sst.get_biff_record()
File "/Users/zisheng/anaconda/lib/python2.7/site-packages/xlwt/BIFFRecords.py", line 77, in get_biff_record
self._add_to_sst(s)
File "/Users/zisheng/anaconda/lib/python2.7/site-packages/xlwt/BIFFRecords.py", line 92, in _add_to_sst
u_str = upack2(s, self.encoding)
File "/Users/zisheng/anaconda/lib/python2.7/site-packages/xlwt/UnicodeUtils.py", line 50, in upack2
us = unicode(s, encoding)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)
Anyone can help? 有人可以帮忙吗? Thanks in advance! 提前致谢!
I've figured it out! 我知道了!
To solve this, we can add UTF-8 notation in the writing process: 为了解决这个问题,我们可以在编写过程中添加UTF-8表示法:
sh.write(rx, cx, unicode(temp, 'utf-8'))
And it's done. 完成了。
Problem solved. 问题解决了。
To solve this, we can add UTF-8 notation in the writing process: 为了解决这个问题,我们可以在编写过程中添加UTF-8表示法:
sh.write(rx, cx, unicode(temp, 'utf-8'))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.