Skip to main content

Обработка XML-файлов

XML Files Handling in Python

Файлы XML в Python позволяют манипулировать и анализировать данные XML. XML (Расширяемый язык разметки) широко используется в качестве формата обмена данными.

Открыть Файл XML и Прочитать Данные с Помощью Python

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

Наиболее часто используемые библиотеки для анализа файлов XML - это lxml и ElementTree.

Использование Библиотеки Lxml

Библиотека lxml является популярным средством чтения файлов XML, она достаточно эффективна для анализа данных XML. Установить библиотеку lxml можно с помощью команды pip.

from lxml import etree

root = etree.parse('file.xml')
for elem in root.iter():
    print(elem.tag, elem.text)

Использование Elementtree

ElementTree - это встроенная библиотека, которая позволяет анализировать XML-файлы. В ElementTree входят встроенные модули, позволяющие анализировать и создавать элементы. Чтобы использовать библиотеку ElementTree, вам нужно её import.

Вот пример того, как вы можете анализировать XML-файл, используя ElementTree:

import xml.etree.ElementTree as ET

tree = ET.parse('file.xml')
root = tree.getroot()

for elem in root:
    print(elem.tag, elem.text)

Используя любой из этих методов, вы можете эффективно читать XML файлы.

Как Написать XML

Чтобы написать XML на Python, вы можете использовать библиотеку XML API ElementTree. Вот два примера кода, которые демонстрируют, как создать и записать XML:

Пример 1: Создание и Запись XML на Python

import xml.etree.cElementTree as ET

### Create XML element tree

root = ET.Element("Person")
name = ET.SubElement(root, "Name")
name.text = "John"
age = ET.SubElement(root, "Age")
age.text = "30"

### Write XML element tree to file

tree = ET.ElementTree(root)
tree.write("person.xml")

Пример 2: Создание и Запись XML с Атрибутами

import xml.etree.cElementTree as ET

### Create XML element tree with attributes
 
root = ET.Element("Person", {"id": "123"})
name = ET.SubElement(root, "Name")
name.text = "Jane"
age = ET.SubElement(root, "Age")
age.text = "25"

### Write XML element tree to file  with custom formatting

tree = ET.ElementTree(root)
tree.write("person.xml", encoding="utf-8", xml_declaration=True)

В обоих примерах используется класс ElementTree() для создания XML-элемента tree. Затем метод write() используется для записи элемента tree в XML-файл. Указав encoding и xml_declaration во втором примере, создается пользовательский форматированный XML-файл с объявлением XML в верхней части.

Как конвертировать XML в JSON

Конвертация XML в JSON - это распространенная задача, которую можно легко выполнить.

Модуль xmltodict позволяет нам конвертировать XML-документ в словарь, который затем может быть легко преобразован в JSON с использованием встроенного модуля json. Ниже приведен пример кода, демонстрирующий, как использовать этот подход:

import xmltodict
import json

# Load XML file
with open('data.xml') as xml_file:
    xml_data = xml_file.read()

# Convert XML to Python dictionary
dict_data = xmltodict.parse(xml_data)

# Convert dictionary to JSON
json_data = json.dumps(dict_data)

# Output JSON data
print(json_data)

Модуль xml.etree.ElementTree позволяет нам разобрать XML-документ и создать объект Element, который можно пройти, чтобы получить необходимые данные. Как только у нас есть данные в виде словаря, мы можем использовать модуль json для их преобразования в JSON. Вот пример кода, демонстрирующий, как использовать этот подход:

import xml.etree.ElementTree as ET
import json

# Load XML file
tree = ET.parse('data.xml')
root = tree.getroot()

# Traverse the Element object to get required data
xml_dict = {}
for child in root:
    xml_dict[child.tag] = child.text

# Convert dictionary to JSON
json_data = json.dumps(xml_dict)

# Output JSON data
print(json_data)

Как Конвертировать XML в CSV

Чтобы конвертировать XML в CSV, вы можете использовать модуль xml.etree.ElementTree и модуль csv. Вот два примера кода, чтобы помочь вам начать:

Пример 1: Использование Модулей Elementtree и CSV

import csv
import xml.etree.ElementTree as ET

### Open the XML file

tree = ET.parse('example.xml')
root = tree.getroot()

### Open the CSV file

csv_file = open('example.csv', 'w')
csvwriter = csv.writer(csv_file)

### Write the column headers

header = []
for child in root[0]:
    header.append(child.tag)
csvwriter.writerow(header)

### Write the data rows

for item in root.findall('.//item'):
    row = []
    for child in item:
        row.append(child.text)
    csvwriter.writerow(row)

### Close the CSV file

csv_file.close()

Пример 2: Использование pandas

import pandas as pd
import xml.etree.ElementTree as ET

### Load the XML file into a dataframe

tree = ET.parse('example.xml')
root = tree.getroot()
dfcols = ['name', 'email', 'phone']
df = pd.DataFrame(columns=dfcols)

for node in root: 
    name = node.find('name').text
    email = node.find('email').text
    phone = node.find('phone').text

    df = df.append(
        pd.Series([name, email, phone], index=dfcols),
        ignore_index=True)

### Save the dataframe to a CSV file

df.to_csv('example.csv', index=False)

В обоих этих примерах модуль xml.etree.ElementTree используется для разбора XML-файла и извлечения данных. Модуль csv (в Примере 1) или библиотека pandas (в Примере 2) используются для записи данных в файл CSV.

Пишите вместе с нами!

Вы можете внести свой вклад в статьи о Python на GitHub: создайте Fork, внесите правки и отправьте нам Pull request.

Profile picture for user AliaksandrSumich
Python engineer, expert in third-party web services integration.
Обновлено: 05/03/2024 - 21:52
Profile picture for user angarsky
Evgeniy Melnikovрецензент
Проверено и опубликовано