gpt4 book ai didi

python - 在 python 中将列表导出为 csv 文件并获取 UnicodeEncodeError

转载 作者:行者123 更新时间:2023-11-30 23:10:07 25 4
gpt4 key购买 nike

我想从我的列表中获取 csv 文件。这是我的 list :

temp = ['سلام' , 'چطوری' ] 

列表成员使用波斯语。我尝试通过以下代码获取 csv 文件:

import csv    
with open("output.csv", "wb") as f:
writer = csv.writer(f)
writer.writerows(temp)

但是终端给了我这个错误:UnicodeEncodeError: 'ascii' 编解码器无法对位置 0 处的字符 u'\u06a9' 进行编码:序数不在范围内 (128)

如何解决这个问题并获取我的 csv 文件?

附注实际上,当我打印 temp 时,我看到这些字符串:

[u'\u06a9\u0627\u062e \u0645\u0648\u0632\u0647 \u06af\u0644\u0633\u062a\u0627\u0646 | Golestan Palace', u'\u062a\u0647\u0631\u0627\u0646', u'\u062a\u0647\u0631\u0627\]

但是当我调用 Temp[1] 时,我得到了这个:

کاخ موزه گلستان | Golestan Palace

如何解决这个问题并获取我的 csv 文件?

为什么 python 有时会对我的数据进行编码,有时却不会?

最佳答案

在另一个答案中,您说您使用的是 Python 2.7。摘自Python Standard Library Reference Manual - csv module :

csv模块不直接支持读写Unicode,但是它是8位干净保存的,可以解决ASCII NUL字符的一些问题。因此,只要避免像 UTF-16 这样使用 NUL 的编码,您就可以编写函数或类来处理编码和解码。建议使用 UTF-8。

同一段落为您提供了一个可用于处理 unicode 数据的类的示例:

class UnicodeWriter:
"""
A CSV writer which will write rows to CSV file "f",
which is encoded in the given encoding.
"""

def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
# Redirect output to a queue
self.queue = cStringIO.StringIO()
self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
self.stream = f
self.encoder = codecs.getincrementalencoder(encoding)()

def writerow(self, row):
self.writer.writerow([s.encode("utf-8") for s in row])
# Fetch UTF-8 output from the queue ...
data = self.queue.getvalue()
data = data.decode("utf-8")
# ... and reencode it into the target encoding
data = self.encoder.encode(data)
# write to the target stream
self.stream.write(data)
# empty queue
self.queue.truncate(0)

def writerows(self, rows):
for row in rows:
self.writerow(row)

但是您也可以尝试更简单的代码:

import csv    
with open("output.csv", "wb") as f:
writer = csv.writer(f)
writer.writerows([u.encode('utf-8') for u in temp])

如果 temp 是 unicode 字符串列表

或:

import csv    
with open("output.csv", "wb") as f:
writer = csv.writer(f)
writer.writerows([[u.encode('utf-8') for u in row] for row in temp])

如果 temp 是 unicode 字符串列表

关于python - 在 python 中将列表导出为 csv 文件并获取 UnicodeEncodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30831149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com