Страницы

Поиск по вопросам

пятница, 28 февраля 2020 г.

Запись данных в xml

#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)) Консоль: good2014-02-16T23:10:12Z Чтобы получить результат как в вопросе, понадобилось привести словарь в нужный формат: 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 строку " Ivan Ivanov Moscow Sergey Sidorov Sochi

Комментариев нет:

Отправить комментарий