"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python으로 XML 필드 검사를 자동화한 날

Python으로 XML 필드 검사를 자동화한 날

2024-08-27에 게시됨
검색:948

The Day I Automated XML Field Checking with Python

모든 것은 여러 XML 파일에서 누락된 필드를 확인하는 임무를 받았을 때 시작되었습니다. 팀에서는 다음 단계를 진행하기 전에 이러한 파일에 모든 필수 필드가 있는지 확인해야 했습니다. 충분히 간단하게 들리죠? 음, 그렇지는 않습니다.

첫 번째 XML 파일을 열고 속성을 검색한 후 수동으로 필수 필드를 찾은 다음 상자를 선택했습니다. 예상하셨겠지만, 매우 빨리 피곤해졌습니다. 한 파일에 몇 분만 저장한 후에는 눈이 번쩍 뜨이고 중요한 것을 놓치지 않았다는 확신이 전혀 없었습니다. 즉, XML은 매우 까다로울 수 있으며 필드 하나가 누락되어도 심각한 문제가 발생할 수 있습니다.

아직 처리해야 할 파일이 많다는 사실에 뼈아픈 두려움이 생겼습니다. 물론 정확성이 매우 중요했습니다. 하나의 누락된 필드가 간과되면 재앙이 초래될 수 있습니다. 그래서 몇 번 심호흡을 하고 잠시 생각한 후에 이 문제를 해결할 더 좋은 방법이 있어야 한다고 결정했습니다.

깨달음: 구조를 위한 자동화

프로그래머로서 저는 이런 단조로운 작업을 수행하는 스크립트를 작성해 보는 것이 어떨까 하는 생각이 들었습니다. 모든 단일 필드를 수동으로 확인하는 대신 프로세스를 자동화하고 정확성을 보장하는 동시에 정신을 차릴 수 있었습니다. 이제 Python의 강력한 기능을 활용할 때가 되었습니다.

개념은 간단했습니다.

  • JSON 파일에 필수 필드 목록이 저장되어 있어 스크립트의 재사용성과 적응성이 뛰어났습니다. 이 접근 방식을 사용하면 스크립트는 구조가 다른 XML 파일도 쉽게 처리할 수 있습니다. 새로운 XML 형식에 필요한 필드로 JSON 파일을 업데이트하기만 하면 스크립트가 수정 없이 다른 XML 스키마에 맞게 자동으로 조정될 수 있습니다.
  • 각 XML 파일을 검토하고 필수 필드가 누락되었는지 확인한 다음 요약을 출력하는 Python 스크립트를 작성해야 했습니다.

이렇게 하면 각 파일에서 필드가 누락된 횟수, 속성이 몇 개나 있는지 쉽게 식별하고 명확한 보고서를 얻을 수 있었습니다. 더 이상 끝없는 수동 확인이나 실수가 없습니다. 제가 접근한 방법은 다음과 같습니다.

유틸리티 스크립트 작성

먼저 필수 필드 목록을 로드해야 했습니다. 이는 필수_필드 키 아래 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