繁体   English   中英

将unicode写入文件python时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM