[英]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.