Запись словарей в excel
Функция deal() возвращает список со словарями. Через цикл получаю n словарей и хочу их записать в excel, но записывается только последний словарь:
from fast_bitrix24 import Bitrix
from pprint import pprint
import pandas as pd
import time
def company(company_id):
"""вытягиваем данные с компании (TITLE', 'COMMENTS', 'PHONE',
'EMAIL)
и записываем в словарь my_dict"""
company = b.get_all('crm.company.list',
{'select': ['TITLE', 'COMMENTS', 'PHONE',
'EMAIL'],
'filter': {'ID': company_id}})
company_dict = {}
company_dict.update(company_dict)
for item in company:
company_dict = {'COMMENTS_COMPANY': item['COMMENTS'], 'TITLE_COMPANY': item['TITLE']}
company_dict.update(company_dict)
if 'EMAIL' in item:
for i in item['EMAIL']:
email = {'EMAIL_COMPANY' : i['VALUE']}
company_dict.update(email)
if 'PHONE' in item:
for i in item['PHONE']:
phone = {'PHONE_COMPANY': i['VALUE']}
company_dict.update(phone)
my_dict.update(company_dict)
return company_dict
def contact(contact_id):
""""вытягиваем данные с котакта ('NAME', 'SECOND_NAME', 'LAST_NAME', 'ADDRESS_CITY',
'PHONE', 'EMAIL')
и записываем в словарь my_dict"""
contact = b.get_all('crm.contact.list',
{'select': ['NAME', 'SECOND_NAME', 'LAST_NAME', 'ADDRESS_CITY',
'PHONE', 'EMAIL'],
'filter': {'ID': contact_id}})
contact_dict = {}
contact_dict.update(contact_dict)
for item_contact in contact:
contact_dict = {'ADDRESS_CITY_CONTACT': item_contact['ADDRESS_CITY'],
'LAST_NAME_CONTACT': item_contact['LAST_NAME'],
'NAME_CONTACT': item_contact['NAME'],
'SECOND_NAME_CONTACT': item_contact['SECOND_NAME']}
contact_dict.update(contact_dict)
if 'EMAIL' in item_contact:
for i in item_contact['EMAIL']:
email = {'EMAIL_CONTACT': i['VALUE']}
contact_dict.update(email)
if 'PHONE' in item_contact:
for i in item_contact['PHONE']:
phone = {'PHONE_CONTACT': i['VALUE']}
contact_dict.update(phone)
my_dict.update(contact_dict)
return contact_dict
def deal():
"""Вытаскиваем данные из сделки 'ID', 'STAGE_ID', 'TITLE',
'OPPORTUNITY', 'BEGINDATE',
'DATE_CREATE', 'DATE_MODIFY',
'ASSIGNED_BY_ID', 'LEAD_ID',
'COMPANY_ID', 'CONTACT_ID'
по указанной пользователем статуса"""
deal_dict = {}
deals = b.get_all('crm.deal.list', {'select': ['ID', 'STAGE_ID', 'TITLE',
'OPPORTUNITY', 'BEGINDATE',
'DATE_CREATE', 'DATE_MODIFY',
'ASSIGNED_BY_ID', 'LEAD_ID',
'COMPANY_ID', 'CONTACT_ID'],
'filter': {'STAGE_ID': stage_dict[stage]}})
for deal in deals:
deal_dict = {'BEGINDATE': deal['BEGINDATE'], 'DATE_CREATE': deal['DATE_CREATE'],
'DATE_MODIFY': deal['DATE_MODIFY'], 'TITLE_DEAL': deal['TITLE']}
my_dict.update(deal_dict)
return deals
webhook = 'https://mycompany24.bitrix24.ru/rest/...........'
b = Bitrix(webhook)
print('Стадии сделки:')
print('Новая, В работе, Выставвление счета, Отправлен клиенту,\n'
'Оплачен, Не оплачен, Сделка провалена, Сделка успешна')
stage_dict = {'новая': 'NEW', 'в работе': 5, 'выставление счета': 1, 'отправлен клиенту': 2,
'оплачен': 3, 'не оплачен': 4, 'сделка провалена': 'LOSE', 'сделка успешна': 'WON'}
my_dict = {}
stage = input('Введите статус сделки: ').lower()
if stage in stage_dict.keys():
# print('id статуса', stage_dict[stage])
for item in deal():
print('id компании', item['COMPANY_ID'])
print(item)
company(item['COMPANY_ID'])
contact(item['CONTACT_ID'])
df = pd.DataFrame({'Статус сделки': [stage_dict[stage]],
'Название сделки': [my_dict['TITLE_DEAL']],
'Дата открытия сделки': [my_dict['BEGINDATE']],
'Дата изменения': [my_dict['DATE_MODIFY']],
'Компания': [my_dict['TITLE_COMPANY']],
'email компании': [my_dict['EMAIL_COMPANY']],
'Телефон компании': [my_dict['PHONE_COMPANY']],
'Комментарий от компании': [my_dict['COMMENTS_COMPANY']]})
df.to_excel('./teamsis.xlsx', sheet_name='Сделки')