«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > День, когда я автоматизировал проверку полей XML с помощью Python

День, когда я автоматизировал проверку полей XML с помощью Python

Опубликовано 27 августа 2024 г.
Просматривать:441

The Day I Automated XML Field Checking with Python

Все началось с того, что мне дали задачу проверить несколько XML-файлов на отсутствие полей. Прежде чем мы могли приступить к следующим шагам, команде необходимо было убедиться, что в этих файлах присутствуют все обязательные поля. Звучит достаточно просто, не так ли? Ну, не совсем.

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

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

Богоявление: автоматизация спешит на помощь

Будучи программистом, у меня возникла идея: почему бы не написать скрипт, который сделает за меня эту монотонную работу? Вместо того, чтобы вручную проверять каждое поле, я мог бы автоматизировать это и гарантировать точность, сохраняя при этом свое здравомыслие. Пришло время использовать возможности Python.

Идея была проста:

  • У меня был список обязательных полей, хранящийся в файле JSON, что сделало скрипт легко адаптируемым и повторно используемым. Используя этот подход, сценарий может легко обрабатывать другие XML-файлы, даже имеющие другую структуру. Вам просто нужно обновить файл JSON, добавив необходимые поля для любого нового формата XML, что позволит сценарию автоматически адаптироваться к различным схемам XML без изменений.
  • Мне нужно было написать скрипт Python, который просматривал бы каждый XML-файл, проверял, отсутствуют ли какие-либо обязательные поля, а затем выводил сводку.

Таким образом, я мог легко определить, сколько раз в каждом файле отсутствовало поле, сколько свойств присутствовало, и получить четкий отчет — больше никаких бесконечных ручных проверок, никаких ошибок. Вот как я к этому подошел.

Написание служебного сценария

Во-первых, мне нужно было загрузить список обязательных полей. Они хранились в файле JSON под ключом требуемые_поля, поэтому я написал функцию для чтения этого файла:

import os
import json
import xml.etree.ElementTree as ET

def load_required_fields(json_file_path):
    with open(json_file_path, 'r') as file:
        data = json.load(file)
        return data.get("required_fields", [])

А потом началось настоящее волшебство. Я написал функцию для анализа каждого XML-файла, перебора его свойств и проверки наличия каждого обязательного поля:

def check_missing_fields(file_path, required_fields):
    # Load the XML file
    tree = ET.parse(file_path)
    root = tree.getroot()

    # Initialize variables to store counts and track missing fields
    total_properties = 0
    missing_fields_counts = {field: 0 for field in required_fields}

    # Loop through each property to check for missing fields
    for property in root.findall('.//property'):
        total_properties  = 1
        for field in required_fields:
            # Use the find() method to look for direct children of the property element
            element = property.find(f'./{field}')
            # Check if the field is completely missing (not present)
            if element is None:
                missing_fields_counts[field]  = 1

    # Print the results
    print('-----------------------------------------')
    print(f'File: {os.path.basename(file_path)}')
    print(f'Total number of properties: {total_properties}')
    print('Number of properties missing each field:')
    for field, count in missing_fields_counts.items():
        print(f'  {field}: {count} properties')
    print('-----------------------------------------')

Эта функция загружала XML-файл, подсчитывала количество свойств и отслеживала, сколько свойств отсутствует в каждом обязательном поле. Функция распечатала отчет, показывающий результаты для каждого обработанного файла.

Наконец, я собрал все воедино в функции main(). Он будет перебирать все XML-файлы в указанном каталоге и запускать функцию проверки полей для каждого из них:

def main():
    # Directory containing XML files
    xml_dir = 'xmls'
    json_file_path = 'required_fields.json'

    # Load required fields from JSON file
    required_fields = load_required_fields(json_file_path)

    # Iterate over each file in the xmls directory
    for file_name in os.listdir(xml_dir):
        if file_name.endswith('.xml'):
            file_path = os.path.join(xml_dir, file_name)
            check_missing_fields(file_path, required_fields)

if __name__ == "__main__":
    main()

После запуска процесса вы получите сводку результатов, подобную этой:

File: properties.xml
Total number of properties: 4170
Number of properties missing each field:
  Title: 0 properties
  Unit_Number: 0 properties
  Type: 0 properties
  Bedrooms: 0 properties
  Bathrooms: 0 properties
  Project: 0 properties
  Price: 0 properties
  VAT: 0 properties
  Status: 10 properties
  Area: 0 properties
  Location: 100 properties
  Latitude: 30 properties
  Longitude: 0 properties
  Apartment_Floor: 0 properties
  Block: 0 properties
  Phase: 0 properties
  Construction_Stage: 0 properties
  Plot_Size: 0 properties
  Yard: 120 properties
  Description: 0 properties
  gallery: 27 properties

Результаты: здравомыслие сохранено

Как только все было готово, я запустил сценарий в своем каталоге XML-файлов. Результат был именно тем, что мне нужно: краткая сводка, показывающая, сколько свойств в каждом файле и какие поля отсутствуют, а также общее количество свойств в каждом XML.

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

Извлеченные уроки

  1. Автоматизация спасает жизнь: всякий раз, когда вы сталкиваетесь с повторяющимися задачами, подумайте, как их можно автоматизировать. Это не только сэкономит ваше время, но и снизит риск человеческой ошибки.
  2. Точность имеет значение: в подобных ситуациях точность имеет первостепенное значение. Простой сценарий, подобный тому, который я написал, может гарантировать, что вы ничего не упустите из виду, что особенно важно при работе с критически важными данными.
  3. Используйте свои навыки программирования: Иногда нам приходится делать что-то вручную, даже если у нас есть навыки, которые могут облегчить нашу жизнь. Найдите минутку, чтобы сделать шаг назад и спросить себя: «Есть ли более эффективный способ сделать это?»

В конце концов, то, что началось как утомительная и подверженная ошибкам задача, превратилось в полезный опыт. Теперь, когда мне приходится выполнять задачи, которые кажутся утомительными или подверженными ошибкам, я напоминаю себе о силе сценариев и автоматизации. Интересно, сколько еще задач я смогу оптимизировать дальше…

Вы можете быстро приступить к этой автоматизации, клонировав созданный мной репозиторий XML Checker. Это даст вам все необходимое, включая сценарий и файлы примеров. После этого вы сможете самостоятельно запустить автоматизацию, настроить ее в соответствии со своими потребностями или еще больше расширить ее функциональность.

Наслаждаться!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/rafaelogic/the-day-i-automated-xml-field-checking-with-python-59ja?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected] удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3