xml_data_aggregator
Xml 2 xlsx tabuser_2065311
python
7 months ago
7.0 kB
2
Indexable
Never
''' Название скрипта: "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}') '''