所以我有两个元组数组,它们以餐厅名称和Int排列:
("Restaurant Name", 0)
一个称为ArrayForInitialSpots,另一个称为ArrayForChosenSpots。我要做的是在csv文件中以并排顺序写入两行的元组,如下所示:
"First Restaurant in ArrayForInitialSPots",0,"First Restaurant in ArrayForChosenSpots", 1
"Second Restaurant in ArrayForInitialSpots",0,"Second Restaurant in ArrayForChosenSpots",0
到目前为止,我试过这样做:
with open('data.csv','w') as out:
csv_out=csv.writer(out)
csv_out.writerow(['Restaurant Name','Change'])
for x, y in zip(arrayForInitialSpots, arrayForChosenSpots):
csv_out.writerow(x + y)
#csv_out.writerow(y)
但我得到:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 3-6: ordinal not in range(128)
如果我删除zip
函数,就会得到too many values to unpack
。有什么建议吗?事先非常感谢。你知道吗
有了mhawke的帮助,这里是我的解决方案
在写入文件时,有两种方法可用于处理扩展ascii字符:
将默认编码设置为utf-8
import sys reload(sys).setdefaultencoding("utf-8")
使用unicodesv writer将数据写入文件
import unicodecsv
unicodecsv这个问题并不是因为使用了
zip()
-看起来没问题,而是编码问题。餐厅名称可能是unicode字符串,或者是ASCII或UTF8以外的编码?可能是ISO-8859-1?你知道吗csv模块不处理unicode;其他编码可能可以工作,但这取决于具体情况。该模块确实可以处理8位值(ASCII NUL除外),因此您应该能够将它们编码为UTF8,如下所示:
其工作原理是将
x+y
形成的元组的每个元素转换为UTF-8字符串。这包括其他编码中的字节字符串,以及可以通过unicode()
转换为unicode字符串的其他对象,如整数。如果字符串是unicode,只需将ENCODING设置为None。你知道吗相关问题 更多 >
编程相关推荐