我使用 Python 自動化 XML 欄位檢查的那一天

王林
發布: 2024-08-15 06:35:37
原創
544 人瀏覽過

The Day I Automated XML Field Checking with Python

這一切都始於我接受檢查多個 XML 檔案是否缺少欄位的任務。在我們繼續下一步之前,團隊需要確保這些文件中存在所有必填欄位。聽起來很簡單,對吧?嗯,不完全是。

我打開了第一個 XML 文件,掃描了屬性,手動查找所需字段,然後勾選了相應的框。正如你所預料的那樣,很快就會感到疲倦。在一個文件中只看了幾分鐘後,我的眼睛變得呆滯,我沒有真正的信心我沒有錯過一些重要的事情。我的意思是,XML 可能非常挑剔,單一缺失欄位可能會導致嚴重問題。

我有一種令人痛苦的恐懼感,因為我知道我還有一堆文件要處理。當然,準確性至關重要——一個被忽視的缺失欄位可能會帶來災難。因此,經過幾次深呼吸和思考片刻後,我決定一定有更好的方法來解決這個問題。

頓悟:自動化來救援

身為程式設計師,我有一個想法:為什麼不寫一個腳本來為我完成這項單調的工作呢?我可以將其自動化並確保準確性,同時在過程中保持理智,而不是手動檢查每個欄位。是時候利用 Python 的力量了。

概念很簡單:

  • 我將必填欄位清單儲存在 JSON 檔案中,這使得腳本具有高度的可重複使用性和適應性。透過使用這種方法,腳本可以輕鬆處理其他 XML 文件,甚至是那些具有不同結構的文件。您只需使用任何新 XML 格式的必要欄位更新 JSON 文件,即可讓腳本自動調整為不同的 XML 模式而無需修改。
  • 我需要編寫一個 Python 腳本來遍歷每個 XML 文件,檢查是否缺少任何必填字段,然後輸出摘要。

這樣,我可以輕鬆識別每個文件中缺少某個欄位的次數、存在多少個屬性,並獲得清晰的報告 - 不再需要無休止的手動檢查,不再出現錯誤。這是我的做法。

編寫實用程式腳本

首先,我需要載入必填欄位的清單。這些儲存在 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 中的屬性總數。

我不需要花費數小時手動檢查每個文件,而是在幾秒鐘內得到答案。該腳本捕獲了幾個丟失的字段,如果我繼續手動路線,我可能會忽略這些字段。

經驗教訓

  1. 自動化是救星:每當您面臨重複性任務時,請考慮如何將它們自動化。它不僅可以節省您的時間,還可以降低人為錯誤的風險。
  2. 準確性很重要:在這種情況下,準確性至關重要。像我寫的這樣一個簡單的腳本可以確保您不會忽略任何事情,這在處理關鍵數據時尤其重要。
  3. 利用你的程式設計技能:有時,我們會陷入手動做事的困境,即使我們有能力讓我們的生活更輕鬆。花點時間退一步問自己,「有沒有更有效的方法來做到這一點?」

最終,一開始令人厭煩且容易出錯的任務變成了一次有益的體驗。現在,每當我接到感覺乏味或容易出錯的任務時,我都會提醒自己腳本和自動化的力量。我想知道接下來我還可以簡化多少其他任務...

您可以透過複製我建立的 XML Checker 儲存庫來快速開始使用此自動化。這將為您提供所需的一切,包括腳本和範例文件。從那裡,您將能夠自行運行自動化,對其進行自訂以滿足您的需求或進一步擴展其功能。

享受吧!

以上是我使用 Python 自動化 XML 欄位檢查的那一天的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!