在python中使用csv.DictWriter写入csv时添加列(带有值)

时间:2018-09-05 11:10:26

标签: python csv dictionary yaml

我有一个yml文件,如下所示:

Stocks:
 - name: shop1
   apples: 100
   mangoes: 200

 - name: shop2
   apples: 20
   mangoes: 50
   bananas: 100
   garbage: 'something'

我要创建一个如下所示的tsv(或csv或pandas数据框)文件:

name    category  apples   mangoes   bananas
shop1   fruits    100      200       0
shop2   fruits    20       50        100

此刻我的代码如下:

import yaml, csv

csv_columns = ['name','apples','mangoes','bananas', 'category']

with open('fruits.yml', 'r') as f:
    doc = yaml.load(f)


csv_file = "somename.csv"
try:
    with open(csv_file, 'w') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=csv_columns, extrasaction='ignore')
        writer.writeheader()
   for item in doc["Stocks"]:
        item.update( {"category":"fruits"})
   for data in doc["Stocks"]:
            writer.writerow(data)
except IOError:
    print("I/O error")

工作正常,除了我不知道添加category列并在行中重复相同值的正确方式。该值实际上是yaml文件的名称。

2 个答案:

答案 0 :(得分:1)

您可以在写入数据行时使用列表推导,如下所示。

for data in doc["websites"]:
    writer.writerow([data[0], "fruits"]+data[1:])

答案 1 :(得分:1)

以下是您所需要的:https://repl.it/repls/MellowDisfiguredGroupware

让我解释一下:

首先,您需要更改csv_columns

csv_columns = ['name','category','apples','mangoes','bananas']

第二,根据您提供的Yaml,websites字典中没有键doc,只有一个Stocks键。我已经相应地编辑了写作部分。

第三,您需要添加带有值category的{​​{1}}键:

fruits