Я пытаюсь экспортировать список пользователей с сервера Jaspersoft в формат CSV, так как в настоящее время у нас нет доступа к БД или какой-либо панели администрирования, и нам придется собирать заявку в службу поддержки и ждать 2 дня каждый раз, когда мыхотел бы список.Я решил попытать счастья, используя REST API и python, и с помощью модуля запросов мне удалось экспортировать XML, содержащий эту информацию.Формат извлеченного XML таков.
Пример XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<users>
<user>
<emailAddress>doejoe@email.com</emailAddress>
<enabled>true</enabled>
<fullName>John Doe</fullName>
<username>doejoe</username>
<roles>
<role>
<externallyDefined>false</externallyDefined>
<name>MANAGER</name>
<desc>Beatings will continue until morale improves</desc>
</role>
<role>
<externallyDefined>false</externallyDefined>
<name>DIRECTOR</name>
</role>
</roles>
</user>
<user>
<emailAddress>kathysmith@email.com</emailAddress>
<enabled>true</enabled>
<fullName>Kathy Smith</fullName>
<username>kathysmith</username>
<externallyDefined>false</externallyDefined>
<roles>
<role>
<externallyDefined>false</externallyDefined>
<name>USER</name>
<desc>User Description</desc>
</role>
<role>
<externallyDefined>false</externallyDefined>
<name>SUPER_MANAGER</name>
<desc>Super Manager description.</desc>
</role>
<role>
<externallyDefined>false</externallyDefined>
<name>SUPER_DIRECTOR</name>
</role>
</roles>
</user>
</users>
Мой код до сих пор:
import lxml.etree as ET
import csv
# load file
tree = ET.parse('Format.xml')
# iterate through each user tag
users = tree.findall('.//user')
with open('user_list.csv', "wb") as csv_file:
writer = csv.writer(csv_file, delimiter=',')
for user in users:
email = user.find('emailAddress').text
enabled = user.find('enabled').text
externallyDefined = user.find('externallyDefined').text
fullName = user.find('fullName').text
tenantId = user.find('tenantId').text
username = user.find('username').text
writer.writerow(email + ',' + enabled + ',' + externallyDefined + ',' + fullName + ',' + tenantId + ',' + username)
Как вы можете сказать - я не программист и даже не настолько близок к этому, поэтомуизвиняюсь, если у тебя кровоточат глаза - начал изучать питон 3 недели назад.Мой код не работает по нескольким причинам:
- Каждый пользователь может иметь от 1 до X ролей, поэтому во всех примерах, которые мне удалось найти, стандартное количество детей.
- Некоторые пользовательские атрибуты могут отсутствовать, поэтому я получаю сообщение об ошибке, когда не обнаружен.
- Некоторые атрибуты повторяются, например, ExternallyDefined как для пользователя, так и для роли!
- Мои циклы экспортируют каждую букву в отдельную ячейку, ноэто то, что я верю, что могу решить.
Моя конечная цель будет выглядеть примерно так:
![Excel Image](https://i.stack.imgur.com/T2yLR.png)
Любая помощь / направление, как я буду решатьЛюбой из этих вопросов будет очень признателен, так как я полностью потерян на этом этапе.Хороших выходных!