【问题标题】:Add text info to each row in Python dictWriter将文本信息添加到 Python dictWriter 中的每一行
【发布时间】:2018-05-03 05:48:15
【问题描述】:

我在 Python 3 中使用 DictWriter 将对象的状态输出到文本文件中,如下所示:

def to_csv(self):
    with open('filename', 'w') as myfile:
        fieldnames = ['a1', 'a2', 'a3', 'a4', 'a5']
        wr = csv.DictWriter(myfile, fieldnames=fieldnames)
        wr.writeheader()
        for idx, row in enumerate(self.tasks):
            wr.writerow(row)

不过,我想在输出中添加一个额外的列。这就是我想要达到的目的:

wr.writerow(row + 'task number:'+idx)

任何pythonic方法可以做到这一点?我想我可以为每一行准备一个字符串,将任务编号附加到该字符串然后将其传递给 writerow(使用常规编写器而不是 DictWriter),但我不想弄乱字符串并使用 DictWriter如果可能的话直接...

【问题讨论】:

  • 为什么wr.writerow(row + {'task number': idx}) 不起作用?只需将其添加到字段名称列表中,您就可以了。
  • 但是我不想在字典本身中添加一个字段,如果这就是你的意思吗?因为不接受在 writerow 中简单地连接它们 - 没有定义 + 运算符......即使你将 dict 行连接到 dict 行

标签: python-3.x dictionary export-to-csv


【解决方案1】:

如果我这样做,我会创建一个新的字典并在每一行中更新它。这可能是最清晰、最明显的方法之一。

fieldnames = ['a1', 'a2', 'a3', 'a4', 'a5', 'task number']
wr = csv.DictWriter(myfile, fieldnames=fieldnames)
wr.writeheader()
for idx, row in enumerate(self.tasks):
    seed = {'task number': idx}
    seed.update(row)
    wr.writerow(seed)

【讨论】:

  • 那行得通 - 我没有太多的电话可以写出来,我可以继续与 dictwriter 合作,这让事情变得更简单......谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多