Я теряю данные при записи словаря в CSV-файл.Не все ключи отображаются в виде заголовков, хотя я считаю, что все было в порядке.Я записываю данные о питательных веществах из различных продуктов в один файл.
extrasaction='ignore'
не позволяет отображать заголовки, поэтому это не вариант.
P_LIST = []
for i in urls:
start_time = time.time()
try:
NUTRITION_TABLE = driver.find_element_by_class_name('product-info-nutritions__table')
ENERGY = NUTRITION_TABLE.find_element_by_tag_name('tbody')
A = ENERGY.find_elements_by_tag_name('tr')
for XS in A:
z = XS.find_elements_by_tag_name('td')
UNIT = z[0].text
VALUE = z[1].text
NEW_DICT[UNIT] = VALUE
print("Table FOUND in: " + str((time.time() - start_time)) + " seconds. Proceeding..\n")
except NoSuchElementException:
print('No nutrition table found. Proceeding..\n')
P_LIST.append(NEW_DICT)
with open('products.csv', 'w', newline='') as f:
headers = list(NEW_DICT.keys())
writer = csv.DictWriter(f, fieldnames=headers)
## extrasaction='ignore' leaves out valuable headers + info.
writer.writeheader()
for i in P_LIST:
writer.writerow(i)
## P_LIST contains multiple dictionaries
>> ValueError: dict contains fields not in fieldnames: 'Vitamin A', 'Vitamin C'.
Для некоторых продуктов витамины известны, для некоторых - нет.
Заранее спасибо.
In [7]: NEW_DICT
Out[7]:
{'url': 'https://example.com/xxx',
'name': 'Coleslaw',
'weight/amount': '1 piece',
'Energie': '60 kJ (14 kcal)',
'Fat': '0.3 g',
'Saturated': '0 g',
'Unsat 1': '0 g',
'Unsat 2+': '0.3 g',
'Carbs': '1.5 g',
'Sugar': '1.5 g',
'Fiber': '1 g',
'Protein': '0.9 g',
'Salt': '0 g'}