【问题标题】:python 2.7 unicode writer robust to NoneTypepython 2.7 unicode writer 对 NoneType 很健壮
【发布时间】:2014-05-02 19:17:12
【问题描述】:

我希望使用 the official examples 的 UnicodeWriter 在尝试进行 CSV 写入时不要在 Unicode 数据上打嗝。但是,如果列表中有空白/缺失/NaN 应该是一行,我会收到此错误:

    self.writer.writerow([s.encode("utf-8") for s in row])
AttributeError: 'NoneType' object has no attribute 'encode'

有简单的解决方法吗?

我重复下面的'官方代码':

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)

【问题讨论】:

    标签: python python-2.7 csv unicode


    【解决方案1】:

    之前的问题(虽然关于数字的字符串转换)也解决了这个问题,请参阅this answer。 只需添加转换为 unicode:self.writer.writerow([unicode(s).encode("utf-8") for s in row])

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      相关资源
      最近更新 更多