這一切都始於我接受檢查多個 XML 檔案是否缺少欄位的任務。在我們繼續下一步之前,團隊需要確保這些文件中存在所有必填欄位。聽起來很簡單,對吧?嗯,不完全是。
我打開了第一個 XML 文件,掃描了屬性,手動查找所需字段,然後勾選了相應的框。正如你所預料的那樣,很快就會感到疲倦。在一個文件中只看了幾分鐘後,我的眼睛變得呆滯,我沒有真正的信心我沒有錯過一些重要的事情。我的意思是,XML 可能非常挑剔,單一缺失欄位可能會導致嚴重問題。
我有一種令人痛苦的恐懼感,因為我知道我還有一堆文件要處理。當然,準確性至關重要——一個被忽視的缺失欄位可能會帶來災難。因此,經過幾次深呼吸和思考片刻後,我決定一定有更好的方法來解決這個問題。
身為程式設計師,我有一個想法:為什麼不寫一個腳本來為我完成這項單調的工作呢?我可以將其自動化並確保準確性,同時在過程中保持理智,而不是手動檢查每個欄位。是時候利用 Python 的力量了。
概念很簡單:
這樣,我可以輕鬆識別每個文件中缺少某個欄位的次數、存在多少個屬性,並獲得清晰的報告 - 不再需要無休止的手動檢查,不再出現錯誤。這是我的做法。
首先,我需要載入必填欄位的清單。這些儲存在 key required_fields 下的 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 儲存庫來快速開始使用此自動化。這將為您提供所需的一切,包括腳本和範例文件。從那裡,您將能夠自行運行自動化,對其進行自訂以滿足您的需求或進一步擴展其功能。
享受吧!
以上是我使用 Python 自動化 XML 欄位檢查的那一天的詳細內容。更多資訊請關注PHP中文網其他相關文章!