Преобразование XML в формат INI в Python

Мы используем форматы файлов XML и INI для хранения данных конфигурации программных систем. В этой статье обсуждается, как преобразовать XML-файл или строку в INI-файл в Python.
Что такое формат файла XML?
XML означает расширяемый язык разметки. Файлы XML — это обычные текстовые файлы, содержащие структурированные данные в иерархическом формате.
На самом базовом уровне файл XML состоит из одного корневого элемента, который содержит все остальные элементы файла. Каждый элемент в файле XML определяется тегом, который идентифицирует элемент и его назначение. Например, мы можем определить тег <title>
чтобы указать, что вложенный текст является заголовком документа.

Например, рассмотрим следующий файл XML.
<?xml version="1.0" encoding="UTF-8"?>
<data>
<employee>
<name>John Doe</name>
<age>35</age>
</employee>
<job>
<title>Software Engineer</title>
<department>IT</department>
<years_of_experience>10</years_of_experience>
</job>
<address>
<street>123 Main St.</street>
<city>San Francisco</city>
<state>CA</state>
<zip>94102</zip>
</address>
</data>
Приведенный выше XML-файл представляет собой набор данных, связанных с сотрудником, его работой и адресом.
- Первая строка XML-файла указывает версию и кодировку XML-файла.
- Корневой элемент файла
<data>
. Он содержит три дочерних элемента, а именно<employee>
,<job>
и<address>
. -
<employee>
элемент содержит два дочерних элемента, т.е.<name>
и<age>
.<name>
элемент содержит имя сотрудника в виде текстового узла, а<age>
Элемент содержит возраст сотрудника в виде текстового узла. <job>
element содержит три дочерних элемента, т.е.<title>
,<department>
и<years_of_experience>
.<title>
Элемент содержит название должности в виде текстовых данных.<department>
элемент содержит название отдела в виде текстового узла и<years_of_experience>
Элемент содержит количество лет опыта работы в качестве текстового узла.-
<address>
element содержит четыре дочерних элемента, т.е.<street>
,<city>
,<state>
и<zip>
.<street>
элемент содержит почтовый адрес в виде текстового узла,<city>
элемент содержит название города в виде текстового узла,<state>
элемент содержит имя состояния в виде текстового узла, а<zip>
Элемент содержит почтовый индекс в виде текстового узла.
Мы можем определить структуру файла XML с помощью определения типа документа (DTD) или схемы XML, которая определяет допустимые элементы, атрибуты и значения, которые можно использовать в файле. Это помогает гарантировать правильность формата и согласованность XML-файлов.
Одним из преимуществ использования XML является его расширяемость. Это означает, что мы можем определить наши собственные элементы и атрибуты для представления данных в соответствии с нашими потребностями. Эта гибкость делает XML популярным выбором для обмена данными между различными приложениями и системами.
Что такое формат файла INI?
INI означает «инициализация». Это относится к формату файла, используемому для хранения настроек конфигурации для различных приложений и операционных систем. Формат файла INI представляет собой простой текстовый формат, состоящий из набора разделов, каждый из которых содержит набор пар ключ-значение.
Файл INI обычно содержит один или несколько разделов. Здесь каждый раздел заключен в квадратные скобки ([]
). Название раздела появляется на отдельной строке и заключено в скобки. За каждым объявлением раздела следует одна или несколько пар ключ-значение.
Каждая пара ключ-значение состоит из ключа и значения, разделенных знаком равенства (=). Ключ — это строка, идентифицирующая параметр, а значение — значение параметра.
Например, мы можем представить данные, указанные в файле XML, в формате INI, как показано ниже.
[employee]
name=John Doe
age=35
[job]
title=Software Engineer
department=IT
years_of_experience=10
[address]
street=123 Main St.
city=San Francisco
state=CA
zip=94102
Вы можете наблюдать повышенную читаемость и простоту данных.
Формат файла INI прост и удобен для чтения и записи. Это делает его популярным для хранения настроек конфигурации для различных приложений и операционных систем. Однако у него есть некоторые ограничения, такие как отсутствие поддержки иерархических структур и невозможность хранения сложных типов данных. В результате другие форматы, такие как XML и JSON, часто используются для более сложных конфигураций.
В следующих разделах статьи мы обсудим различные способы преобразования XML-файла или строки в формат INI с помощью модуля configparser и модуля xmltodict в Python.
Строка XML в файл INI в Python
Чтобы преобразовать строку XML в файл INI, мы будем использовать модуль xmltodict и модуль configparser. Для этого мы будем использовать следующие шаги.
- Сначала мы откроем INI-файл в режиме записи с помощью
open()
Функция для сохранения выходного файла.open()
функция принимает имя файла в качестве первого входного аргумента и литерал Python“w”
в качестве второго входного аргумента. После выполнения возвращает указатель на файл. - Далее мы создадим пустой
ConfigParser
объект с помощьюConfigParser()
функция, определенная в модуле configparser. Мы будем использоватьConfigParser
объект для создания INI-файла. - Теперь мы будем использовать
parse()
метод, определенный в модуле xmltodict, для преобразования строки xml в словарь Python.parse()
Метод принимает строку XML в качестве входного аргумента и возвращает словарь Python. - Мы знаем, что файлы INI не содержат иерархических данных. Однако файлы XML хранятся в виде древовидной структуры. Здесь корневой узел в XML-файле не содержит данных. Итак, мы удалим из словаря ключ, соответствующий корневому узлу xml-файла.
- После удаления из словаря ключа, содержащего корневой узел, мы будем считывать данные из словаря Python в
ConfigParser
объект. - Сначала мы добавим разделы в
ConfigParser
объект. Для этого мы будем использоватьadd_section()
метод, определенный в модуле configparser.add_section()
Метод принимает имя раздела в качестве входного аргумента и добавляет его вConfigParser
объект. - Чтобы добавить разделы, мы сначала получим внешние ключи словаря, используя
keys()
метод. Затем мы пройдемся по списку ключей и добавим их как разделы вConfigParser
объект. - После добавления разделов мы добавим поля в каждый раздел. Для этого мы будем использовать
set()
метод.set()
метод при вызове наConfigParser
объект, принимает три входных аргумента. Первый аргумент — это имя раздела, второй аргумент — это имя поля, а третий входной аргумент — это значение поля. После выполнения добавляет поле в соответствующий раздел вConfigParser
объект. - Чтобы добавить имена полей в
ConfigParser
объект, мы будем использовать внешние ключи в словаре для доступа к внутренним словарям и перебирать пары ключ-значение. Для каждого раздела мы будем перебирать пары ключ-значение во внутреннем словаре и добавлять их вConfigParser
объект с помощьюset()
метод. - После считывания всех данных в
ConfigParser
объект, мы запишем его в INI-файл с помощьюwrite()
метод.write()
метод при вызове наConfigParser
объект, принимает указатель файла на INI-файл в качестве входных данных. После выполнения он записывает данные изConfigParser
объект в файле INI. - Наконец, мы будем
close()
файл с помощьюclose()
метод.
Используя описанные выше шаги, мы можем легко преобразовать строку XML в файл INI в Python. Вы можете наблюдать это на следующем примере.
import xmltodict
import configparser
xml_string="""<?xml version="1.0" encoding="utf-8"?>
<data>
<employee>
<name>John Doe</name>
<age>35</age>
</employee>
<job>
<title>Software Engineer</title>
<department>IT</department>
<years_of_experience>10</years_of_experience>
</job>
<address>
<street>123 Main St.</street>
<city>San Francisco</city>
<state>CA</state>
<zip>94102</zip>
</address>
</data>
"""
file =open("employee1.ini","w")
xml_dict=xmltodict.parse(xml_string)
outer_key=list(xml_dict.keys())[0]
xml_dict = xml_dict[outer_key]
config_object = configparser.ConfigParser()
sections=list(xml_dict.keys())
for section in sections:
config_object.add_section(section)
for section in sections:
inner_dict=xml_dict[section]
fields=inner_dict.keys()
for field in fields:
value=inner_dict[field]
config_object.set(section, field, str(value))
config_object.write(file)
file.close()
Выходной INI-файл выглядит следующим образом.

Код, использованный в приведенном выше примере, имеет более высокое время выполнения. Мы можем переписать приведенный выше код более питоническим способом, как показано ниже.
import xmltodict
import configparser
xml_string="""<?xml version="1.0" encoding="utf-8"?>
<data>
<employee>
<name>John Doe</name>
<age>35</age>
</employee>
<job>
<title>Software Engineer</title>
<department>IT</department>
<years_of_experience>10</years_of_experience>
</job>
<address>
<street>123 Main St.</street>
<city>San Francisco</city>
<state>CA</state>
<zip>94102</zip>
</address>
</data>
"""
file =open("employee1.ini","w")
xml_dict=xmltodict.parse(xml_string)
outer_key=list(xml_dict.keys())[0]
xml_dict = xml_dict[outer_key]
config_object = configparser.ConfigParser()
sections=list(xml_dict.keys())
for section, options in xml_dict.items():
config_object.add_section(section)
for key, value in options.items():
config_object.set(section, key, str(value))
config_object.write(file)
file.close()
Вывод приведенного выше кода будет таким же, как и предыдущий код.
Преобразование XML-файла в INI-файл в Python
Чтобы преобразовать файл XML в файл INI, мы откроем файл XML с помощью open()
функция. Далее мы будем использовать read()
метод для чтения содержимого XML-файла в виде строки. Получив строку XML из файла, мы можем преобразовать строку в файл INI, используя описанный выше подход.
Например, предположим, что у нас есть следующий файл XML.

Мы можем преобразовать вышеуказанный файл XML в файл INI в Python, как показано ниже.
import xmltodict
import configparser
xml_file=open("employee.xml","r")
xml_string=xml_file.read()
xml_dict=xmltodict.parse(xml_string)
outer_key=list(xml_dict.keys())[0]
xml_dict = xml_dict[outer_key]
config_object = configparser.ConfigParser()
for section, options in xml_dict.items():
config_object.add_section(section)
for key, value in options.items():
config_object.set(section, key, str(value))
file =open("employee.ini","w")
config_object.write(file)
file.close()
Выходной файл выглядит следующим образом.

Заключение
В этой статье мы обсудили различные способы преобразования XML-файла или строки в INI-файл в Python. Чтобы узнать больше о преобразовании файлов, вы можете прочитать эту статью о том, как преобразовать ini в xml в Python. Вам также может понравиться эта статья о том, как вставить строку в кадр данных pandas.
Надеюсь, вам понравилось читать эту статью. Следите за информативными статьями.
Счастливого обучения!
Связанный
Рекомендуемое обучение Python
Курс: Python 3 для начинающих
Более 15 часов видеоконтента с инструкциями для начинающих. Узнайте, как создавать приложения для реального мира, и освойте основы.
Ссылка на источник