すべては、欠落しているフィールドがないか複数の XML ファイルをチェックするタスクを私に与えられたときに始まりました。チームは、次のステップに進む前に、すべての必須フィールドがこれらのファイルに存在することを確認する必要がありました。とても簡単そうに思えますよね?そうですね、完全ではありません。
最初の XML ファイルを開いてプロパティを調べ、必要なフィールドを手動で探して、ボックスにチェックを入れました。ご想像のとおり、すぐに疲れてしまいました。 1 つのファイルを数分見ただけで、私の目は曇り、何か重要なことを見逃していないかどうか本当に自信がありませんでした。つまり、XML は非常に扱いにくいため、フィールドが 1 つ欠けていると、将来的に大きな問題が発生する可能性があります。
まだ処理しなければならないファイルがたくさんあると知って、ひりひりするような恐怖を感じました。そして、もちろん、精度は非常に重要であり、フィールドが 1 つ見落とされていると、大惨事が発生する可能性があります。そこで、数回深呼吸して少し考えた後、これに取り組むもっと良い方法があるはずだと判断しました。
プログラマーである私は、この単調な作業を行うためのスクリプトを書いてみてはどうかというアイデアを思いつきました。すべてのフィールドを手動でチェックする代わりに、プロセスを自動化し、正気を保ったまま正確性を保証できます。 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 内のプロパティの総数を示す簡潔な概要です。
各ファイルを手動でチェックするのに何時間も費やす代わりに、数秒で答えが得られました。スクリプトは、手動ルートを続けていたら見落としていたかもしれないいくつかの欠落フィールドを検出しました。
結局、面倒でエラーが発生しやすい作業として始まった作業が、やりがいのある経験に変わりました。今では、退屈なタスクや間違いを起こしやすいタスクを受け取るたびに、スクリプト作成と自動化の力を思い出します。次に他にどれだけのタスクを効率化できるだろうか…
作成した XML チェッカー リポジトリのクローンを作成することで、この自動化をすぐに開始できます。これにより、スクリプトやサンプル ファイルなど、必要なものがすべて提供されます。そこから、自動化を自分で実行したり、ニーズに合わせてカスタマイズしたり、機能をさらに拡張したりすることができます。
楽しむ!
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3