Все началось с того, что мне дали задачу проверить несколько 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