我有一个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文件的名称。
答案 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