我是python的新手,我正在尝试使用下面显示的代码来执行上面的标题所说的。它一直运行到我要求保存xls输出的位置。任何帮助将不胜感激。
import glob import csv import xlwt for filename in glob.glob("C:\xxxx\*.txt"): wb = xlwt.Workbook() sheet = wb.add_sheet('sheet 1') newName = filename spamReader = csv.reader(open(filename, 'rb'), delimiter=';',quotechar='"') for rowx, row in enumerate(spamReader): for colx, value in enumerate(row): sheet.write(rowx, colx, value) wb.save(newName + ".xls") print "Done" Traceback (most recent call last): File "C:/Users/Aline/Desktop/Python_tests/1st_trial.py", line 13, in <module> wb.save("C:\Users\Aline\Documents\Data2013\consulta_cand_2010\newName.xls") File "C:\Python27\lib\site-packages\xlwt\Workbook.py", line 662, in save doc.save(filename, self.get_biff_data()) File "C:\Python27\lib\site-packages\xlwt\Workbook.py", line 637, in get_biff_data shared_str_table = self.__sst_rec() File "C:\Python27\lib\site-packages\xlwt\Workbook.py", line 599, in __sst_rec return self.__sst.get_biff_record() File "C:\Python27\lib\site-packages\xlwt\BIFFRecords.py", line 76, in get_biff_record self._add_to_sst(s) File "C:\Python27\lib\site-packages\xlwt\BIFFRecords.py", line 91, in _add_to_sst u_str = upack2(s, self.encoding) File "C:\Python27\lib\site-packages\xlwt\UnicodeUtils.py", line 50, in upack2 us = unicode(s, encoding) UnicodeDecodeError: 'ascii' codec can't decode byte 0xc7 in position 4: ordinal not in range(128)
[编辑]此代码有效。
import glob import csv import xlwt for filename in glob.glob("C:\\Users\\Aline\\Documents\\Data2013\\consulta_cand_2010\\*.txt"): spamReader = csv.reader((open(filename, 'rb')), delimiter=';',quotechar='"') encoding = 'latin1' wb = xlwt.Workbook(encoding=encoding) sheet=xlwt.Workbook() sheet = wb.add_sheet('sheet 1') newName = filename for rowx, row in enumerate(spamReader): for colx, value in enumerate(row): sheet.write(rowx, colx, value) wb.save(newName + ".xls") print "Done"
我相信,您需要为输出电子表格设置编码。您需要知道该文件正在使用什么编码。csv模块不直接支持unicode,但[8-bit-clean][1]它仅适用于大多数西方语言。
[8-bit-clean][1]
在不知道文本文件的编码是什么的情况下,您有两个选择。选项1是根据python使用本地编码:
>>> import locale >>> lang_code, encoding = locale.getdefaultlocale()
^^请小心使用getdefaultlocale()。文档指出编码 可能为None 。
或者 只是回退到UTF8,然后交叉手指:D。
>>> encoding = 'UTF8' >>> workbook = xlwt.Workbook(encoding=encoding)