#python #python_3x #xml
Есть список словарей вида:
[{"first_name":"Ivan", "last_name":"Ivanov", "city":"Moscow"}, {"first_name":"Sergey",
"last_name":"Sidorov", "city":"Sochi"}...]
Мне нужно этот список записать в xml формат вида:
Ivan
Ivanov
Moscow
...
...
Как это реализовать, используя стандартные библиотеки 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
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
Комментариев нет:
Отправить комментарий