Найти - Пользователи
Полная версия: Не могу сгенерировать файл CSV
Начало » Python для новичков » Не могу сгенерировать файл CSV
1
dron4ik86
Пытаюсь генерировать 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)
JOHN_16
Ну и что Вам не понятно из сообщения? Вам говорят что словарь содержит ключ address который не перечислен в fieldnames, и это действительно так. В чем Ваш вопрос то?
dron4ik86
 [   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'})]
Это то что я получаю к примеру, проблема моя в том что я хочу по колонкам в CSV разбить и по улице и по номеру дома итд, но когда я в fieldnames вношу address у меня в одной колонке просто JSON всех данных которые находятся в address
JOHN_16
ну вы странный, а с его вы взяли что DictWriter так умеет? СТранно ожидать от инструмента то, что он не умеет.
В вашем случае есть разные варианты. Например, напишите функцию которая принимает словарь со структурой user_details, а возвращает словарь который по ключам совпадает с fieldnames. Таким образом вы получите функцию обертку (адаптер) которая трансформирует ваши данные в вид который ожидает принимающая сторона. Ну и примините эту функцию к вашему коду. Примерно так
     writer.writerows((my_adapter(user_detail) for user_detail in list_user_details)) # используется генератор
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB