Преобразуйте ответ Json с X словарями в списке в читаемый csv - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь экспортировать список макросов, которые я получаю с веб-сайта, в CSV.

Проблема заключается в том, что мне нужно запустить этот скрипт через x страниц, каждая страница имеет 100 результатов и каждый результат имеет y количество действий.

Поле 'actions' - это список, который содержит несколько словарей (разные номера в каждом результате), из которых я хочу извлечь первое значение в столбец и второе значение I хочу быть данными, которые идут ниже)

С этим типом данных:

{'id': 360011748819,
 'title': 'Macros de reenvío::Portugal::Fraude-Excellence',
 'actions': 
[{'field': 'status', 'value': 'open'},
  {'field': 'comment_value_html',
   'value': '<p>{{dc.macro-derivacion_fraude}}</p><p><br></p>'},
  {'field': 'current_tags', 'value': 'excellence derived_from_fraud'},
  {'field': 'group_id', 'value': '24905185'}]£

Я хотел бы получить CSV, который выглядит следующим образом:

image1

Мне удалось написать это:

for i in range (2):
        url = f'https://xxxx.zendesk.com/api/v2/macros.json?active=true;include_usage_24h;page={i+1}'
        r = requests.get(url, auth=(user, pwd), headers=headers).json()
        if len(r['macros']) == 0:
            break ##This breaks the loop if the page is empty
        else:
            for b in range (100):
                d = len(r['macros'][b]['actions'])
                lista += [str(r['macros'][b]['id']) + "`" + str(r['macros'][b]['title'])
                 + "`" + str(r['macros'][b]['restriction']) + "`" + str(list(r['macros'][b]['actions'][c].values()))
                 for c in range(d-1)]


ma = pd.DataFrame(lista)
ma.to_csv('accionesmacro.csv', index=False)

Но результат в CSV выглядит так:

image2

Каждое действие создается в отдельной строке ... Я отчасти отчаялся, и любая помощь будет сильно оценена.

С уважением.

1 Ответ

0 голосов
/ 26 апреля 2020

Может быть попробовать это:

lista = []
for i in range(1,3):
    url = f'https://xxxx.zendesk.com/api/v2/macros.json?active=true;include_usage_24h;page={i}'
    r = requests.get(url, auth=(user, pwd), headers=headers).json()
    if not r['macros']:
        break
    for b in r['macros']:
        actions = b['actions']
        row = [ b[field] for field in ('id', 'title', 'restriction ] + [ action['value'] for action in actions ]
        lista.append(row)
ma = pd.DataFrame(lista)
ma.to_csv('accionesmacro.csv', index=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...