[英]Error in writing unicode to file python
这是我的第一个python程序,需要一些帮助将utf-8数据写入文件。
目的是从excel文件中读取数据并将逗号分隔的数据写入文本文件,下面是我正在运行的代码,该代码给出了以下粘贴的错误。
import xlrd
import csv
import codecs
wb = xlrd.open_workbook('/etl/dev/input/CustList.xls')
sh = wb.sheet_by_index(1)
file_output = codecs.open('/etl/dev/input/CustList.csv', 'w', 'utf-8')
for rownum in xrange(sh.nrows):
file_output.write(sh.row_values(rownum))
file_output.close()
这是错误
Traceback (most recent call last):
File "TestXls2Csv.py", line 20, in <module>
file_output.write(sh.row_values(rownum))
File "/fstools/gptools/ext/python/lib/python2.6/codecs.py", line 686, in write
return self.writer.write(data)
File "/fstools/gptools/ext/python/lib/python2.6/codecs.py", line 351, in write
data, consumed = self.encode(object, self.errors)
TypeError: coercing to Unicode: need string or buffer, list found
非常感谢您的帮助。
谢谢Zulfi
尝试以下
row_values = [str(val) for val in sh.row_values(rownum)]
file_output.write(",".join(row_values) + "\n")
似乎对于一张Excel表格工作正常,但对于另一张表格却出现以下错误
追溯(最近一次通话最近):文件“ TestXls2Csv.py”,行12,在file_output.write(“,”。join(sh.row_values(rownum))+“ \\ n”)+“ \\ n”)TypeError:序列项8:预期的字符串或Unicode,float发现我最初尝试使用csv.writer,但其中一个单元格中有一个\\ xa0字符,这引起了很多麻烦,因此安装了编解码器并进行了努力使其正常工作。
以下是有关Excel文档的信息(如果可以提供任何见解)
===文件:CustList.xls ===
开启花了3.03秒
BIFF版本:8; datemode:0代码页:1200(编码:utf_16_le); 国家:(1,1)最后保存者:u'Rajesh,Vatha'数据表数量:2使用mmap:1; 格式:0; 按需:0衣衫agged的行:0加载时间:0.01秒(阶段1)1.86秒(阶段2)
工作表0:名称= u'MEMBER'; 数目= 29966; ncols = 11
第1张:姓名= u'PHYSICANS'; 数目= 1619; ncols = 19
命令花费了0.20秒,请提出建议。
谢谢Zulfi
dciriello是正确的,因为file_output.write应该将字符串作为其参数,但是sh.row_values(rownum)返回一个列表,这是主要原因。
如果要将文件从xls复制到csv,请执行以下操作。
import xlrd
import csv
import codecs
wb = xlrd.open_workbook('/etl/dev/input/CustList.xls')
table = wb.sheet_by_index(1)
nrows = table.nrows
with codecs.open('/etl/dev/input/CustList.csv', 'w', 'utf-8') as file_output:
spamwriter = csv.writer(file_output)
for i in range(nrows):
spamwriter.writerow(table.row_values(i))
如果要在输出文件中使用逗号分隔值,则只需更改write命令即可将值列表连接到以逗号分隔的字符串。
但是首先,您必须将列表中的每个值转换为字符串,因为row_values()
返回的是一个包含字符串和浮点值的列表。
...
row_values = [str(val) for val in sh.row_values(rownum)]
file_output.write(",".join(row_values) + "\n")
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.