Руководство по преобразованию XML в CSV с помощью Python.

В отличие от HTML файлы XML имеют собственные теги. На основе этих тегов мы можем выбрать необходимые столбцы для создания CSV.

Этот процесс имеет два преобразования: XML → DICT → CSV.

Пример XML:

<employees>
   <employee>
      <name>Carolina</name>
        <role>Data Engineer</role>
        <age>24</age>
    </employee>
    <employee>
      <name>Roosaka</name>
        <role>Data Scientist</role>
        <age>27</age>
    </employee>
    <employee>
      <name>Kumar</name>
        <role>Machine Learning Engineer</role>
        <age>31</age>
    </employee>
    <employee>
      <name>Vijay</name>
        <role>Devops Engineer</role>
        <age>26</age>
    </employee>
</employees>

Шаг 1. Импортируйте необходимые пакеты

Установите необходимые пакеты, если будет предложено:

#1
import csv
import xmltodict

Шаг 2. Преобразование XML в DICT

#2
# Reading xml file
with open("sample.xml", 'r') as file:
    filedata = file.read()
    
# Converting xml to python dictionary (ordered dict)    
data_dict = xmltodict.parse(filedata)

Преобразованный dict представляет собой упорядоченный словарь, поэтому следующий код преобразует все упорядоченные элементы dict в dict.

#3
# creating a list of employee data
employee_data_list = [dict(x) for x in data_dict["employees"]["employee"]]

Вот как выглядит employee_data_list, мы можем анализировать данные на основе наших необходимых столбцов.

[{'name': 'Carolina', 'role': 'Data Engineer', 'age': '24'},
{'name': 'Roosaka', 'role': 'Data Scientist', 'age': '27'},
{'name': 'Kumar', 'role': 'Machine Learning Engineer', 'age': '31'},
{'name': 'Vijay', 'role': 'Devops Engineer', 'age': '26'} ]

Шаг 3. Преобразование Dict в CSV

Создание заголовков и строк данных о сотрудниках и запись их в файл CSV.

#3
# Selecting headers for CSV
HEADERS = [‘name’, ‘role’ ,’age’]
rows = []
# Interating through each element to get row data
for employee in employee_data_list:
    name = employee["name"]
    role= employee["role"]
    age = employee["age"]
    # Adding data of each employee to row list
    rows.append([name,role,age])
#Writing to CSV
with open('employee_data.csv', 'w',newline="") as f:
    write = csv.writer(f)
    write.writerow(HEADERS)
    write.writerows(rows)

Вывод:

Данные также можно анализировать с помощью упорядоченного словаря, но для лучшего понимания данных я преобразовал данные в словарь во фрагменте кода #3.

LinkedIn GitHub

Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.