Python で XML フィールド チェックを自動化した日

王林
リリース: 2024-08-15 06:35:37
オリジナル
559 人が閲覧しました

The Day I Automated XML Field Checking with Python

すべては、欠落しているフィールドがないか複数の XML ファイルをチェックするタスクを私に与えられたときに始まりました。チームは、次のステップに進む前に、すべての必須フィールドがこれらのファイルに存在することを確認する必要がありました。とても簡単そうに思えますよね?そうですね。

最初の XML ファイルを開いてプロパティを調べ、必要なフィールドを手動で探して、ボックスにチェックを入れました。ご想像のとおり、すぐに疲れてしまいました。 1 つのファイルを数分見ただけで、私の目は曇り、何か重要なことを見逃していないかどうか本当に自信がありませんでした。つまり、XML は非常に扱いにくいため、フィールドが 1 つ欠けていると、将来的に大きな問題が発生する可能性があります。

まだ処理しなければならないファイルがたくさんあると知って、ひりひりするような恐怖を感じました。そして、もちろん、精度は非常に重要であり、フィールドが 1 つ見落とされていると、大惨事が発生する可能性があります。そこで、数回深呼吸して少し考えた後、これに取り組むもっと良い方法があるはずだと判断しました。

啓示: 自動化が救いになる

プログラマーである私は、この単調な作業を行うためのスクリプトを書いてみてはどうかというアイデアを思いつきました。すべてのフィールドを手動でチェックする代わりに、プロセスを自動化し、正気を保ったまま正確性を保証できます。 Python の力を活用するときが来ました。

コンセプトはシンプルでした:

  • 必須フィールドのリストを JSON ファイルに保存していたので、スクリプトの再利用性と適応性が高くなりました。このアプローチを使用すると、スクリプトは、構造が異なる場合でも、他の XML ファイルを簡単に処理できます。新しい XML 形式に必要なフィールドを使用して JSON ファイルを更新するだけで、スクリプトを変更せずにさまざまな XML スキーマに自動的に調整できます。
  • 各 XML ファイルを調べて、必須フィールドが欠落しているかどうかを確認し、概要を出力する Python スクリプトを作成する必要がありました。

このようにして、各ファイルでフィールドが欠落していた回数、存在するプロパティの数を簡単に特定し、明確なレポートを取得することができました。終わりのない手動チェックや間違いはなくなりました。私のアプローチ方法は次のとおりです。

ユーティリティ スクリプトの作成

まず最初に、必須フィールドのリストをロードする必要がありました。これらはキー 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート