xml_data_aggregator
Xml 2 xlsx tabuser_2065311
python
2 years ago
7.0 kB
9
Indexable
'''
Название скрипта: "xml_data_aggregator2xlsx"
Описание:
Данный скрипт предназначен для агрегации данных из нескольких XML-файлов, находящихся в выбранной директории. Скрипт определяет заголовки данных, извлекает информацию из XML-файлов и сохраняет ее в удобном формате CSV. Просто выберите директорию с XML-файлами, и скрипт самостоятельно проведет анализ структуры файлов, извлечет данные и создаст CSV-файл для удобного использования.
'''
import os
import xml.etree.ElementTree as ET
import pandas as pd
from collections import defaultdict
from tkinter import filedialog
from tkinter import Tk
# Создаем окно для выбора директории
root = Tk()
root.withdraw() # Скрываем окно
# Запрашиваем путь к директории с XML файлами
directory = filedialog.askdirectory(title="Выберите директорию с XML файлами")
if not directory:
print("Директория не выбрана. Выход из программы.")
exit()
# Список для хранения данных
data = []
# Шаг 1: Определение заголовков из структуры XML-файлов
headers = set()
for filename in os.listdir(directory):
if filename.endswith('.xml'):
file_path = os.path.join(directory, filename)
# Парсинг XML-файла
tree = ET.parse(file_path)
root = tree.getroot()
# Анализ структуры XML-файла и сбор всех возможных заголовков
for document in root.findall('.//Документ'):
headers.update(document.keys())
for element in document.iter():
headers.update(element.keys())
headers = list(headers)
print(f"Определенные заголовки: {headers}")
# Шаг 2: Извлечение и сохранение данных из XML-файлов
for filename in os.listdir(directory):
if filename.endswith('.xml'):
file_path = os.path.join(directory, filename)
tree = ET.parse(file_path)
root = tree.getroot()
for document in root.findall('.//Документ'):
record = defaultdict(str)
for header in headers:
record[header] = document.get(header, '')
for element in document.iter():
if header in element.keys():
record[header] = element.get(header)
data.append(record)
# Шаг 3: Преобразование данных в DataFrame
df = pd.DataFrame(data)
# Шаг 4: Сохранение данных в CSV файл
output_file = 'aggregated_data_modern_3.csv'
df.to_csv(output_file, index=False, encoding='utf-8-sig')
print(f'Данные успешно сохранены в файл {output_file}')
'''
#нужно обозначить заголовки
import os
import xml.etree.ElementTree as ET
import pandas as pd
# Путь к директории с XML файлами
directory = '/Users/wl/Downloads/≈ Safari/data-20231225-structure-20200408/test'
# Список для хранения данных
data = []
# Шаг 1: Перебор всех файлов в директории
for filename in os.listdir(directory):
if filename.endswith('.xml'):
file_path = os.path.join(directory, filename)
# Шаг 2: Парсинг XML файла
tree = ET.parse(file_path)
root = tree.getroot()
# Извлечение и сохранение нужных данных из файла
for document in root.findall('.//Документ'):
record = {
'ИдДок': document.get('ИдДок'),
'ДатаДок': document.get('ДатаДок'),
'НаимОрг': document.find('.//СведНП').get('НаимОрг'),
'ИННЮЛ': document.find('.//СведНП').get('ИННЮЛ'),
'КолРаб': document.find('.//СведССЧР').get('КолРаб'),
}
data.append(record)
# Шаг 3: Преобразование данных в DataFrame
df = pd.DataFrame(data)
# Шаг 4: Сохранение данных в CSV файл
output_file = 'aggregated_data.csv'
df.to_csv(output_file, index=False, encoding='utf-8-sig')
print(f'Данные успешно сохранены в файл {output_file}')
'''
'''
# не нужно обозначать заголовки, определяет автоматически
import os
import xml.etree.ElementTree as ET
import pandas as pd
from collections import defaultdict
# Путь к директории с XML файлами
directory = '/Users/wl/Downloads/≈ Safari/data-20231225-structure-20200408/test'
# Список для хранения данных
data = []
# Шаг 1: Определение заголовков из структуры XML-файлов
headers = set()
for filename in os.listdir(directory):
if filename.endswith('.xml'):
file_path = os.path.join(directory, filename)
# Парсинг XML-файла
tree = ET.parse(file_path)
root = tree.getroot()
# Анализ структуры XML-файла и сбор всех возможных заголовков
for document in root.findall('.//Документ'):
headers.update(document.keys())
for element in document.iter():
headers.update(element.keys())
headers = list(headers)
print(f"Определенные заголовки: {headers}")
# Шаг 2: Извлечение и сохранение данных из XML-файлов
for filename in os.listdir(directory):
if filename.endswith('.xml'):
file_path = os.path.join(directory, filename)
tree = ET.parse(file_path)
root = tree.getroot()
for document in root.findall('.//Документ'):
record = defaultdict(str)
for header in headers:
record[header] = document.get(header, '')
for element in document.iter():
if header in element.keys():
record[header] = element.get(header)
data.append(record)
# Шаг 3: Преобразование данных в DataFrame
df = pd.DataFrame(data)
# Шаг 4: Сохранение данных в CSV файл
output_file = 'aggregated_data_modern.csv'
df.to_csv(output_file, index=False, encoding='utf-8-sig')
print(f'Данные успешно сохранены в файл {output_file}')
'''
Editor is loading...