繁体   English   中英

python csv编码writerow

[英]python csv encoding writerow

在 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")

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。

这个问题发布已经有一段时间了,所以我猜 Python API 已经改变了,但是现在,您实际上可以使用显式编码打开文件,这解决了我遇到的类似问题:

更改代码中的这一行应该可以解决问题。 无需使用该内部循环使您的代码 O(n2)ish。

open(scriptName, 'w', encoding='utf-8')

或者对于来自 python文档的完整示例:

import csv
with open('some.csv', newline='', encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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