python csv编码writerow

时间:2014-08-18 12:55:44

标签: python csv encoding

在Windows 2008服务器上使用web2py我遇到以下问题

我正在从json创建csv文件,当将列表写入文件时,我收到以下错误。它在csv writerow上崩溃了

<type 'exceptions.UnicodeEncodeError'> 'ascii' codec can't encode character u'\\u010c'

它在我的电脑上运行正常。 Windows 7但在服务器上我有编码问题

有什么建议吗?谢谢

我创建文件的代码如下

dataDict = json.loads(data.replace("'", "\""))
path = path
scriptName = os.path.join(path, id + 'script.txt')
file = open(scriptName, 'wb') 
output = csv.writer(file, delimiter='\t')

##Month hours
file.write("begin month_hours \r\n")
file.write("delavec    mesec    month_hours_min    month_hours_max\r\n")
for rec in dataDict["mandatory"]:
    output.writerow(rec)
file.write("\r\nend month_hours \r\n")

1 个答案:

答案 0 :(得分:5)

JSON字符串始终是Unicode值,在Python 2中需要在写入CSV文件时进行编码。如果您没有明确地这样做,Python将使用ASCII编解码器。如果您的所有数据都包含ASCII范围内的文本,但是当您遇到超出该范围的数据时失败,那就没问题了。

选择不同的编码并明确编码; UTF-8是一个很好的编码选择:

for rec in dataDict["mandatory"]:
    output.writerow([unicode(c).encode('utf8') for c in rec])

我首先将所有值转换为unicode(),以防您的数据中的数据不是unicode();数字或布尔值或None例如。然后将结果显式编码为UTF-8。