在python中将列表导出为csv文件并解决UnicodeEncodeError问题

2024-05-14 05:54:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从我的列表中得到一个csv文件。 这是我的名单:

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

名单上的成员用波斯语。 我试图通过以下代码获取csv文件:

^{pr2}$

但终端给我的错误是: 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\]

但当我给临时工打电话时,我得到的是:

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

如何解决它并获得我的csv文件?在

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


Tags: 文件csv编码列表成员temp名单u0627
2条回答

在另一个回答中,您说您使用的是python2.7。摘录自Python Standard Library Reference Manual - csv module

csv模块不直接支持Unicode的读写,但是它是8位的,除了ASCII-NUL字符的一些问题之外。因此,只要避免像UTF-16那样使用NULs的编码,就可以编写处理编码和解码的函数或类。建议使用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)

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

^{pr2}$

如果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字符串列表

python2中的csv库无法处理Unicode数据。这在Python3中已修复,但不会进行后端口移植。但是,有一个替换的第三方库可以解决这个问题。在

请尝试改用UnicodeCSV。在

相关问题 更多 >