0

植物の学名のルックアップ テーブルがあります。このルックアップ テーブルを使用して、データ入力担当者がデータを入力している他のテーブルを検証したいと考えています。これらの学名のフォーマットが間違っている場合があるため、エラーにフラグを立てるためのスクリプトを作成しています。

それぞれの名前をフォーマットする非常に具体的な方法があります。たとえば、'Sonchus arvensis L' です。具体的には、Sonchus の S を大文字にし、最後に L を付ける必要があります。私は約 1000 の異なる植物を持っており、それぞれが異なる形式になっています。次にいくつかの例を示します。

  • リナリア ダルマティカ (L.) ミル。
  • Knautia arvensis (L.) Coult.
  • Alliaria petiolata (M. Bieb.) カヴァラ & グランデ
  • Berteroa incana (L.) DC.
  • Aegilops cylindrica ホスト

ご覧のとおり、これらの文字列はすべて非常に異なる形式になっています (つまり、一部の文字は大文字で、一部は大文字でなく、括弧、アンパサンド、ピリオドなどがあります)。

私の質問は、ルックアップ テーブル内の各文字列の書式設定を動的に読み取り、それをデータ入力担当者が入力した値と比較して適切に書式設定されていることを確認できる方法はありますか? 以下のスクリプトでは、書式設定に関係なく一致させるために、すべての値を大文字にして、値がルックアップ テーブルにあるかどうかをテスト (最初の elif) します。次のテスト (2 番目の elif) では、ルックアップ テーブルの値と値を比較することで、テストの書式設定を並べ替えることができます。これにより、フォーマットに基づいて一致しないレコードが返されますが、一致しないレコードが返された理由は具体的にわかりません。

私が理解しているのは、ルックアップ テーブルの文字列値を読み取り、各文字列の書式設定を何らかの方法で動的に読み取って、エラーを具体的に特定できるようにすることです (つまり、文字は大文字にする必要がありますが、そうではありません)。

これまでのところ、私のコード スニペットは次のようになります。

        # Determine if the field heaidng is in a list I built earlier
        if "SCIENTIFIC_NAME" in fieldnames:
            # First, Test to see if record is empty
            if not row.SCIENTIFIC_NAME:
                weedPLineErrors.append("SCIENTIFIC_NAME record is empty")
            # Second, Test to see if value is in the lookup table, regardless of formatting.
            elif row.SCIENTIFIC_NAME.upper() not in [x.upper() for x in weedScientificTableList]:
                weedPLineErrors.append("COMMON_NAME (" + row.SCIENTIFIC_NAME + ")" + " is not in the domain table")
            # Third, if the second test is satisfied, we know the value is in the lookup table. We can then test the lookup table again, without capitalizing everything to see if there is an exact match to account for formatting.
            elif row.SCIENTIFIC_NAME not in weedScientificTableList:
                weedPLineErrors.append("COMMON_NAME (" + row.SCIENTIFIC_NAME + ")" + " is not formatted properly")                        
            else:
                pass

私の質問が十分に明確であることを願っています。私は文字列テンプレートを見ましたが、それが私がやりたいことをしているとは思いません...少なくとも動的ではありません。誰かが私をより良い方向に向けることができれば、私はすべての目です...しかし、多分私はこれについて昼食をとるつもりです.

ありがとう、マイク

4

2 に答える 2