Python

Преобразование 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-файл выглядит следующим образом.

Выходной INI-файл
Выходной 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-файл
Входной 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()

Выходной файл выглядит следующим образом.

Выходной INI-файл
Выходной INI-файл

Заключение

В этой статье мы обсудили различные способы преобразования XML-файла или строки в INI-файл в Python. Чтобы узнать больше о преобразовании файлов, вы можете прочитать эту статью о том, как преобразовать ini в xml в Python. Вам также может понравиться эта статья о том, как вставить строку в кадр данных pandas.

Надеюсь, вам понравилось читать эту статью. Следите за информативными статьями.

Счастливого обучения!

Рекомендуемое обучение Python

Курс: Python 3 для начинающих

Более 15 часов видеоконтента с инструкциями для начинающих. Узнайте, как создавать приложения для реального мира, и освойте основы.


Ссылка на источник

Похожие статьи

Кнопка «Наверх»