모든 것은 여러 XML 파일에서 누락된 필드를 확인하는 임무를 받았을 때 시작되었습니다. 팀에서는 다음 단계를 진행하기 전에 이러한 파일에 모든 필수 필드가 있는지 확인해야 했습니다. 충분히 간단하게 들리죠? 음, 그렇지는 않습니다.
첫 번째 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의 총 속성 수를 보여주는 간결한 요약입니다.
각 파일을 수동으로 확인하는 데 몇 시간을 소비하는 대신 몇 초 만에 답변을 얻었습니다. 스크립트는 수동 경로를 계속 진행했다면 간과했을 수 있는 몇 가지 누락된 필드를 포착했습니다.
결국, 지루하고 오류가 발생하기 쉬운 작업으로 시작된 작업이 보람 있는 경험으로 바뀌었습니다. 이제는 지루하거나 실수하기 쉬운 작업을 수행할 때마다 스크립팅과 자동화의 힘을 상기하게 됩니다. 다음에는 얼마나 많은 작업을 간소화할 수 있을지 궁금합니다…
내가 만든 XML Checker 저장소를 복제하면 이 자동화를 빠르게 시작할 수 있습니다. 그러면 스크립트와 예제 파일을 포함하여 필요한 모든 것이 제공됩니다. 여기에서 자동화를 직접 실행하고 필요에 맞게 사용자 정의하거나 기능을 더욱 확장할 수 있습니다.
즐기다!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3