【发布时间】:2014-06-04 07:27:08
【问题描述】:
这是我在 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
非常感谢任何帮助。
谢谢 祖尔菲
尝试了以下
row_values = [str(val) for val in sh.row_values(rownum)]
file_output.write(",".join(row_values) + "\n")
Excel 的一张表似乎工作正常,但另一张表出现以下错误
Traceback(最近一次调用最后一次): 文件“TestXls2Csv.py”,第 12 行,在 file_output.write(",".join(sh.row_values(rownum)) + "\n") TypeError: sequence item 8: expected string or Unicode, float found我最初尝试使用 csv.writer 但其中一个单元格中有一个 \xa0 字符,这导致了很多麻烦,因此安装了编解码器并努力让它工作。
如果有任何见解,下面是有关 excel 文档的信息
=== 文件:CustList.xls ===
打开耗时 3.03 秒
BIFF 版本:8;日期模式:0 代码页:1200(编码:utf_16_le);国家: (1, 1) 最后保存者:u'Rajesh, Vatha' 数据表数量:2 使用mmap:1;格式:0;点播:0 参差不齐的行:0 加载时间:0.01 秒(第 1 阶段)1.86 秒(第 2 阶段)
工作表 0: name = u'MEMBER'; nrows = 29966; ncols = 11
表 1:名称 = u'PHYSCANS'; nrows = 1619; ncols = 19
命令耗时 0.20 秒请提出建议。
谢谢祖尔菲
【问题讨论】:
-
我认为问题在于 sh.row_values(rownum) 是一个列表(row_values 返回给定行中单元格值的一部分。)而不是字符串,所以你不能将其传递给 write()。如果你想写所有行,你应该迭代每个单元格
-
输出文件应该是什么样子的?举个例子吧。
-
输出应包含每个 excel 行中的数据,作为文本文件中的逗号分隔列
-
您混淆了您的问题更新。你试过我的新答案了吗?