Уведомления

Группа в Telegram: @pythonsu

#1 Март 5, 2018 13:17:37

dron4ik86
Зарегистрирован: 2016-10-28
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Не могу сгенерировать файл CSV

Пытаюсь генерировать 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)

Офлайн

#2 Март 5, 2018 13:51:00

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Не могу сгенерировать файл CSV

Ну и что Вам не понятно из сообщения? Вам говорят что словарь содержит ключ address который не перечислен в fieldnames, и это действительно так. В чем Ваш вопрос то?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Март 5, 2018 13:56:57

dron4ik86
Зарегистрирован: 2016-10-28
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Не могу сгенерировать файл CSV

 [   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

Отредактировано dron4ik86 (Март 5, 2018 13:58:23)

Офлайн

#4 Март 5, 2018 14:33:26

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Не могу сгенерировать файл CSV

ну вы странный, а с его вы взяли что DictWriter так умеет? СТранно ожидать от инструмента то, что он не умеет.
В вашем случае есть разные варианты. Например, напишите функцию которая принимает словарь со структурой user_details, а возвращает словарь который по ключам совпадает с fieldnames. Таким образом вы получите функцию обертку (адаптер) которая трансформирует ваши данные в вид который ожидает принимающая сторона. Ну и примините эту функцию к вашему коду. Примерно так

     writer.writerows((my_adapter(user_detail) for user_detail in list_user_details)) # используется генератор



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version