У меня есть словарь с несколькими строками из моего вопроса ранее.
Генерируется с помощью:
import requests
from bs4 import BeautifulSoup
import re
import csv
links = ["34519-kevitsa-copper-concentrator-plant", "34520-kevitsa-copper-mine", "34356-glogow-copper-refinery"]
for l in links:
page = requests.get("https://www.industryabout.com/country-territories-3/2199-finland/copper-mining/"+l)
soup = BeautifulSoup(page.content, 'lxml')
rows = soup.select("strong")
d = {}
for r in rows:
name, value, *rest = r.text.split(":")
if not rest:
d[name] = value
print(d)
print(d.items())
дает:
dict_items ([(«Товары», «Медь, никель, золото»), («Площадь», «Лаппи»), («Тип», «Завод по обогащению меди»)])
dict_items ([(«Товары», «Медь, никель, золото»), («Площадь», «Лаппи»), («Тип», «Шахта»)])
dict_items ([(«Товары», «Медь»), («Район», «Долнослаские»), («Тип», «Медный завод»)])
Но когда я пишу это в CSV с любым из решений из " Запись словаря в файл CSV с одной строкой для каждого 'ключ: значение' ", я получаю только последний элемент словаря, другие опущены.
Commodities;Copper
Area;Dolnoslaskie
Type;Copper Refinery
Как я могу написать CSV с выглядит так:
Commodities;Area;Type
Copper, Nickel, Gold;Lappi;Copper Concentrator Plant
Copper, Nickel, Gold;Lappi;Open-pit mine
Copper;Dolnoslaskie;Copper Refinery
Я также пытался перейти на массив, но не смог найти решение для array[name] = value
.
Этот ответ кажется идеальным, но iterkeys только для Python 2.
with open('my_data.csv', 'wb') as ofile:
writer = csv.writer(ofile, delimiter='\t')
writer.writerow(['ID', 'dict1', 'dict2', 'dict3'])
for key in ddict.iterkeys():
writer.writerow([key] + [d[key] for d in dicts])