Dict содержит поле не в именах полей.Что я делаю неправильно? - PullRequest
0 голосов
/ 23 сентября 2019

Я теряю данные при записи словаря в 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'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...