「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python で XML フィールド チェックを自動化した日

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

2024 年 8 月 27 日に公開
ブラウズ:797

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 チェッカー リポジトリのクローンを作成することで、この自動化をすぐに開始できます。これにより、スクリプトやサンプル ファイルなど、必要なものがすべて提供されます。そこから、自動化を自分で実行したり、ニーズに合わせてカスタマイズしたり、機能をさらに拡張したりすることができます。

楽しむ!

リリースステートメント この記事は次の場所に転載されています: https://dev.to/rafaelogic/the-day-i-automated-xml-field-checking-with-python-59ja?1 侵害がある場合は、[email protected] までご連絡ください。それを削除するには
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3