#python #python_3x #xml
Есть список словарей вида: [{"first_name":"Ivan", "last_name":"Ivanov", "city":"Moscow"}, {"first_name":"Sergey", "last_name":"Sidorov", "city":"Sochi"}...] Мне нужно этот список записать в xml формат вида:Как это реализовать, используя стандартные библиотеки python? Вот мой код: import xml.etree.ElementTree as ET root = ET.Element('root') person = ET.SubElement(root,'person') a=[] # тот список for key in a: ET.SubElement(person,'first_name').text = key['first_name'] ET.SubElement(person,'last_name').text = key['last_name'] ET.SubElement(person,'city').text = key['city'] tree = ET.ElementTree(root) tree.write('xmlf.xml') Но этот цикл неправильный, выход такой: Ivan Ivanov Moscow ... ...Как его исправить? Ivan Ivanov Moscow Sergey Sidorov Sochi ...
Ответы
Ответ 1
Исправил код в вопросе: items = [ {"first_name": "Ivan", "last_name": "Ivanov", "city": "Moscow"}, {"first_name": "Sergey", "last_name": "Sidorov", "city": "Sochi"}, ] import xml.etree.ElementTree as ET root = ET.Element('root') for i, item in enumerate(items, 1): person = ET.SubElement(root, 'person' + str(i)) ET.SubElement(person, 'first_name').text = item['first_name'] ET.SubElement(person, 'last_name').text = item['last_name'] ET.SubElement(person, 'city').text = item['city'] tree = ET.ElementTree(root) tree.write('xmlf.xml') Результат (с добавлением отступов):Ivan Ivanov Moscow Sergey Sidorov Sochi Ответ 2
Думаю, такого в стандартной библиотеке нет, но такое реализовано в библиотеке xmltodict: # pip install xmltodict import xmltodict my_dict = { 'response': { 'status': 'good', 'last_updated': '2014-02-16T23:10:12Z', } } print(xmltodict.unparse(my_dict)) Консоль:Чтобы получить результат как в вопросе, понадобилось привести словарь в нужный формат: my_dict = { 'root': { 'person1': {"first_name": "Ivan", "last_name": "Ivanov", "city": "Moscow"}, 'person2': {"first_name": "Sergey", "last_name": "Sidorov", "city": "Sochi"}, } } # Параметр full_document=False убирает из XML строку " good 2014-02-16T23:10:12Z Ivan Ivanov Moscow Sergey Sidorov Sochi
Комментариев нет:
Отправить комментарий