بدأ كل شيء عندما تم تكليفي بمهمة التحقق من عدة ملفات XML بحثًا عن الحقول المفقودة. احتاج الفريق إلى التأكد من وجود جميع الحقول الإلزامية في هذه الملفات قبل أن نتمكن من المضي قدمًا في خطواتنا التالية. يبدو بسيطا بما فيه الكفاية، أليس كذلك؟ حسنًا، ليس تمامًا.
لقد فتحت ملف XML الأول، وقمت بمسح الخصائص ضوئيًا، وبحثت يدويًا عن الحقول المطلوبة، ووضعت علامة في المربعات أثناء ذهابي. كما قد تتوقع، أصبح الأمر متعبًا بسرعة كبيرة. وبعد بضع دقائق فقط في ملف واحد، كانت عيناي تدمع، ولم تكن لدي ثقة حقيقية في أنني لم أفوّت أي شيء مهم. أعني أن ملفات 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.
بدلاً من قضاء ساعات في فحص كل ملف يدويًا، حصلت على إجابتي في غضون ثوانٍ. اكتشف البرنامج النصي العديد من الحقول المفقودة التي ربما كنت سأتجاهلها إذا واصلت السير في المسار اليدوي.
في النهاية، ما بدأ كمهمة مرهقة وعرضة للأخطاء تحول إلى تجربة مجزية. الآن، عندما أحصل على مهام تبدو مملة أو عرضة للأخطاء، أذكر نفسي بقوة البرمجة النصية والأتمتة. أتساءل كم عدد المهام الأخرى التي يمكنني تبسيطها بعد ذلك...
يمكنك البدء بسرعة في هذه الأتمتة عن طريق استنساخ مستودع XML Checker الذي قمت بإنشائه. سيوفر لك هذا كل ما تحتاجه، بما في ذلك البرنامج النصي وملفات الأمثلة. ومن هناك، ستتمكن من تشغيل الأتمتة بنفسك، وتخصيصها لتناسب احتياجاتك أو توسيع وظائفها بشكل أكبر.
يتمتع!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3