我正在尝试从页面中抓取xls文件并将其保存到csv。我已经创建了一个处理文件的函数,但是当我尝试编写文件时,我得到一个编码错误,说它无法处理文件中的一个字符。
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 9: ordinal not in range(128)
我正在尝试使用unicode函数在列表中的每个项目上强制执行utf-8,这似乎适用于大多数项目,但不知怎的,我仍然遇到同样的错误。
def csv_from_excel( fileName ):
# open the xls file and save as a csv
wb = xlrd.open_workbook(fileName)
worksheets = wb.sheet_names()
for worksheet_name in worksheets:
worksheet = wb.sheet_by_name(worksheet_name)
print worksheet
csvfile = open(fileName, 'wb')
wr = csv.writer(csvfile, quoting=csv.QUOTE_ALL)
for rownum in xrange(worksheet.nrows):
cleanrow = [unicode(i) for i in worksheet.row_values(rownum)]
print cleanrow
wr.writerow(cleanrow)
csvfile.close()
答案 0 :(得分:1)
在Python 2中,您需要将编码字符串传递给csv
模块,而不是Unicode值。
for rownum in xrange(worksheet.nrows):
cleanrow = [unicode(i).encode('utf8') for i in worksheet.row_values(rownum)]
print cleanrow
wr.writerow(cleanrow)
这会将所有值编码为UTF-8,然后再将它们传递给writer对象。
在对象上调用unicode()
会将非unicode值(字节字符串,数字等)转换为unicode
对象,而不是UTF-8编码的字节。只有明确的.encode()
方法调用才能实现。