簡體   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