Форум сайта python.su
Пытаюсь генерировать csv файл с данными пользователя, постоянно летит
ValueError: dict contains fields not in fieldnames: 'address'
from faker import Factory import csv import random import pprint from collections import defaultdict fake_en = Factory.create('en_US') pp = pprint.PrettyPrinter(indent=4) user_details = defaultdict(dict) list_user_details = [] for i in range(1): user_details["first_name"] = fake_en.first_name() user_details["last_name"] = fake_en.last_name() user_details["email"] = fake_en.user_name() + '@uag.zed' user_details["phone_number"] = "0" + str(random.randint(50888888, 52999999)) user_details["password"] = "test" + str(random.randint(123, 500)) user_details["country"] = fake_en.country_code() user_details["leadsource"] = random.randint(500, 700) user_details["affiliate_id"] = random.randint(10, 20) user_details["account_id"] = "" user_details["brand"] = "UAG" user_details["address"]["street_number"] = random.randint(10, 200) user_details["address"]["street_name"] = fake_en.street_name() user_details["address"]["city"] = fake_en.city() user_details["address"]["state"] = fake_en.state() user_details["address"]["address_country"] = user_details["country"] user_details["address"]["zip_code"] = fake_en.zipcode() list_user_details.append(user_details.copy()) pp.pprint(list_user_details) with open('test_file.csv', 'w') as csvfile: filed_names = ['first_name', 'last_name', 'email', 'phone_number', 'password', 'country', 'leadsource', 'affiliate_id', 'account_id', 'brand', 'street_number', 'street_name', 'city', 'state', 'address_country', 'zip_code', ] writer = csv.DictWriter(csvfile, fieldnames=filed_names) writer.writeheader() writer.writerows(list_user_details)
Отредактировано dron4ik86 (Март 5, 2018 13:19:06)
Офлайн
Ну и что Вам не понятно из сообщения? Вам говорят что словарь содержит ключ address который не перечислен в fieldnames, и это действительно так. В чем Ваш вопрос то?
Офлайн
[ defaultdict(<class 'dict'>, { 'account_id': '', 'address': { 'address_country': 'DE', 'city': 'Port Teresastad', 'state': 'Minnesota', 'street_name': 'Meyers Extensions', 'street_number': 70, 'zip_code': '18803'}, 'affiliate_id': 11, 'brand': 'TTT', 'country': 'DE', 'email': 'tiffanywest@ccc.zed', 'first_name': 'Daniel', 'last_name': 'Ward', 'leadsource': 601, 'password': 'test154', 'phone_number': '051752630'})]
Отредактировано dron4ik86 (Март 5, 2018 13:58:23)
Офлайн
ну вы странный, а с его вы взяли что DictWriter так умеет? СТранно ожидать от инструмента то, что он не умеет.
В вашем случае есть разные варианты. Например, напишите функцию которая принимает словарь со структурой user_details, а возвращает словарь который по ключам совпадает с fieldnames. Таким образом вы получите функцию обертку (адаптер) которая трансформирует ваши данные в вид который ожидает принимающая сторона. Ну и примините эту функцию к вашему коду. Примерно так
writer.writerows((my_adapter(user_detail) for user_detail in list_user_details)) # используется генератор
Офлайн