为了账号安全,请及时绑定邮箱和手机立即绑定

将多个制表符分隔的.txt文件转换为多个.xls文件

将多个制表符分隔的.txt文件转换为多个.xls文件

慕码人8056858 2021-03-28 15:15:39
我是python的新手,我正在尝试使用下面显示的代码来执行上面的标题所说的。它一直运行到我要求保存xls输出的地步。任何帮助将不胜感激。import globimport csvimport xlwtfor 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 savedoc.save(filename, self.get_biff_data())File "C:\Python27\lib\site-packages\xlwt\Workbook.py", line 637, in get_biff_datashared_str_table   = self.__sst_rec()File "C:\Python27\lib\site-packages\xlwt\Workbook.py", line 599, in __sst_recreturn self.__sst.get_biff_record()File "C:\Python27\lib\site-packages\xlwt\BIFFRecords.py", line 76, in get_biff_recordself._add_to_sst(s)File "C:\Python27\lib\site-packages\xlwt\BIFFRecords.py", line 91, in _add_to_sstu_str = upack2(s, self.encoding)File "C:\Python27\lib\site-packages\xlwt\UnicodeUtils.py", line 50, in upack2us = unicode(s, encoding)UnicodeDecodeError: 'ascii' codec can't decode byte 0xc7 in position 4: ordinal not in    range(128)
查看完整描述

3 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

我相信,您需要为输出电子表格设置编码。您需要知道该文件正在使用什么编码。csv模块不直接支持unicode,但是[8-bit-clean][1]它仅适用于大多数西方语言。


在不知道文本文件的编码是什么的情况下,您有两个选择。选项1是根据python使用本地编码:


   >>> import locale

   >>> lang_code, encoding = locale.getdefaultlocale()

^^请小心使用getdefaultlocale()。该文档指出,编码可能为None。


或者只是回退到UTF8,然后交叉手指:D。


   >>> encoding = 'UTF8'

   >>> workbook = xlwt.Workbook(encoding=encoding)


查看完整回答
反对 回复 2021-04-01
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您没有转义文件名。例如,在Python字符串"consulta_cand_2010\newName.xls"具有"\n"在中间,这是最终的行的字符---一个文件名无效!

在Windows中,你需要编写包含文件名的文本字符串"C:\\Like\\This"或者"C:/Like/This"甚至r"C:\Like\This"


查看完整回答
反对 回复 2021-04-01
  • 3 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信