繁体   English   中英

csv python中的Unicode编码错误

[英]Unicode encoding error in csv python

在将解析的内容写入python 2.7中的csv时,我不断遇到此类错误:UnicodeEncodeError:'ascii'编解码器无法编码570-579位置的字符:序号不在范围内(128)

因此,经过一些研究,我发现了文档中的示例以及关于SO的类似问题: 读取和写入CSV文件,包括使用Python 2.7的unicode,但我无法使用以下代码:

    data = {
        'scrapeUrl': url,
        'model': final_model_num,
        'title': final_name, 
        'description': final_description, 
        'price': str(final_price), 
        'image': final_first_image, 
        'additional_image': final_images,
        'quantity': '1', 
        'subtract': '1', 
        'minimum': '1', 
        'status': '1', 
        'shipping': '1' 
    } 
    with open("local/file1.csv", "w") as f:
        writer=csv.writer(f, delimiter=",")
        writer.writerows([data.keys()])
        for row in zip(*data.values()):
            row=[s.encode('utf-8') for s in row]
            writer.writerows([row])

我的版本似乎只是将每个变量的第一个字符写入每一行; 我尝试删除解压缩密钥作为一些故障排除,但这导致所有数据正确打印,但是csv的一列而不是一行。

你基本上拥有的是一组键值对,所以你基本上只有一组值,当调用zip时,这些值最终被分解为单个字符'rows':

>>> zip(*['abc', 'def', 'ghi'])
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]

此外,示例中的最短值的len为1,这可以解释为什么只有所有值的第一个字符作为输出的单行。

你想做的就是这样

    with open("local/file1.csv", "w") as f:
        writer = csv.writer(f, delimiter=",")
        writer.writerow(data.keys())
        writer.writerow([s.encode('utf8') for s in data.values()])

或者,使用带编码的codecs.open来解决必须手动将unicode解码为str

    with codecs.open("local/file1.csv", "w", encoding='utf8') as f:
        writer = csv.writer(f, delimiter=",")
        writer.writerow(data.keys())
        writer.writerow(data.values())

暂无
暂无

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

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