Создание вспомогательных таблиц в листе Excel из xml с использованием дерева элементов python

<?xml version="1.0" encoding="UTF-8"?> -<Metrics> -<File name="N:/Users/Source/Callbacks.c"> -<Entity name="N:/Users/Source/CAN_Callbacks.c" type="file"> <Metric name="STTDE" value="2.205"/> <Metric name="STM28" value="27"/> <Metric name="STTDO" value="1.999"/> </Entity> -<Entity name="ApplNwmBusoff" type="function"> <Metric name="STM07" value="1"/> <Metric name="STUNV" value="1"/> <Metric name="STSUB" value="1"/> </Entity> </File> </Metrics> 

Это xml-код. Я хочу создать субтитры в листе Excel следующим образом:

введите описание изображения здесь

Это мой код:

 import os import xml.etree.ElementTree as ET import pandas as pd dir = r"C:\Users\HIL Tester\projt\prqa\reports\projt_MDR_13062017_112431.xml" file_name = [] metric_name = [] metric_value = [] table_end_indices = [] metric_name_lists = [] metric_value_lists = [] main_list = [] tree = ET.parse(dir) root = tree.getroot() for child in root[0].iter('Entity'): file_name.append(child.get('name')) for table_ind in range(len(root[0])): for c in root[0][table_ind].iter('Metric'): metric_name.append(c.get('name'))#all the headers are appended to metric name list metric_value.append(c.get('value'))#all the values are appended to metric value list data_frame1 = pd.DataFrame(file_name) data_frame2 = pd.DataFrame(metric_name) data_frame3 = pd.DataFrame(metric_value) frames = [data_frame1, data_frame2, data_frame3] result = pd.concat(frames) result=result.transpose() writer = pd.ExcelWriter(r'N:\Users\xml\report.xlsx') result.to_excel(writer, 'xml_report') writer.save() 

Но этот код генерирует таблицу в этом формате. Я хочу создать таблицы в вышеупомянутом формате. Может кто-то мне помочь, пожалуйста?

введите описание изображения здесь

One Solution collect form web for “Создание вспомогательных таблиц в листе Excel из xml с использованием дерева элементов python”

Решение с использованием openpyxl , например:

 from openpyxl import Workbook wb = Workbook() ws = wb.worksheets[0] ws.title = 'xml_report' tree = ET.parse(xml) root = tree.getroot() for entity in root[0].iter('Entity'): subtable_header = [] subtable_header.append(entity.get('name')) subtable_values = [''] for metric in entity.iter('Metric'): subtable_header.append(metric.get('name')) subtable_values.append(metric.get('value')) ws.append(subtable_header) ws.append(subtable_values) wb.save('N:\Users\xml\report.xlsx') 

Выход :

Протестировано с помощью Python: 3.4.2 – openpyxl: 2.4.1 – LibreOffice: 4.3.3.2

Interesting Posts

Преобразование значения в 4 байта в python

Pythonic Way для создания объединения всех значений, содержащихся в нескольких списках

Многопроцессорность python: некоторые функции не возвращаются, когда они полны (слишком большой материал очереди)

Не удалось составить список списков назначенного размера

Ошибка: function () принимает не менее n аргументов (n задано)

Python: определить длину последовательности равных элементов в списке

Python Tkinter 2.7 Проблема с изображением.

Динамическая печать терминала с помощью python

Как написать несколько условий if-statement в структуре робота

python не может импортировать opencv, потому что он не может найти libjpeg.8.dylib

Получить количество значений по столбцам – Pandas DataFrame

фильтр django со списком значений

Как правильно взаимодействовать с процессом с использованием модуля подпроцесса

Удаление непечатаемых символов из строки в python

Python – временно изменить среду текущего процесса

Python - лучший язык программирования в мире.