有没有一种方法可以避免在使用时跳过行csv.dictWriter.writerow(萨默罗)

2024-05-15 21:19:24 发布

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

我正在处理一些文件,并希望创建我正在处理的内容的日志。我通过使用字典来保存每个观察值的键和值来创建日志,然后将字典附加到一个列表(字典列表)。在

为了保存日志,我使用Python的csv模块写出字典列表。最初我使用的是writerows,但我遇到了一个问题:我存储的一些值很少是ascii以外的值

示例

 Investee\xe2\x80\x99s Share of Profits

我的解决方案是使用try/except语句遍历字典列表,跳过问题字典

^{pr2}$

但是,这会导致在输出csv文件的每一行中插入一个额外的行。在

value1 value2 value3 etc . . .
#blank row
value1 value2 value3 etc

我看不出如何抑制这种行为。在

再加一点代码,就可以更清楚地知道我是怎么来的

import csv
keyset=set([])
for item in x[1]:
    keyset |=set(item.keys())
keys=list(keyset)
logref=open(r'c:\December_2010_File_list.csv','w')
dict_writer=csv.DictWriter(logref,keys)

keyset |=set(item.keys())

Tags: 文件csv内容列表字典etckeysetkeys
1条回答
网友
1楼 · 发布于 2024-05-15 21:19:24

请参阅http://docs.python.org/library/csv.html#csv-examples上的文档

它们提供了一个UnicodeWriter类,如下所示:

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)

相关问题 更多 >