tkfilter.py ライブラリ ドキュメント

ライブラリの機能と目的

tkfilter.py ライブラリは、tklib パッケージの tkObject クラスを継承したフィルタリングモジュールを提供します。このライブラリの主な目的は、外部のデータファイル(例えば、実験データやスペクトルデータなど)から特定の情報を動的に読み込み、抽出し、管理するための共通フレームワークを提供することです。

具体的には、以下の機能を提供します。

  • 動的なモジュールロード: 指定されたディレクトリとファイルマスクに基づいて、外部のデータ読み込みモジュール(フィルタモジュール)を動的にロードし、管理します。これにより、さまざまなデータ形式に対応する柔軟な処理が可能になります。

  • データ抽出: ロードされたモジュールを使用してデータファイルを読み込み、正規表現や数値インデックスに基づいて特定のデータ(ラベルやデータ配列)を効率的に検索・抽出します。

  • データ管理: 読み込んだデータやそれに関連するメタデータ(ファイル情報など)をインスタンス変数として保持し、後続の処理で利用できるようにします。

  • 出力補助: tklib.tkutils のデータ表示ユーティリティをラップし、整形された出力機能を提供します。

このライブラリは、データ分析や処理のワークフローにおいて、多様なデータソースからのデータ取得を抽象化し、一貫したインターフェースでアクセスできるようにすることで、開発の効率化とコードの再利用性を高めることを目指しています。

importする方法

tkfilter.py ライブラリの tkFilter クラスを他のPythonプログラムからインポートするには、以下の構文を使用します。

from tkfilter import tkFilter

必要な非標準ライブラリとインストール方法

tkfilter.py は、以下の非標準ライブラリに依存しています。

  • tklib: tkObject および tkutils モジュールを提供します。

これらのライブラリは、Pythonのパッケージインストーラ pip を使用してインストールできます。

pip install tklib

なお、re モジュールはPythonの標準ライブラリであるため、別途インストールする必要はありません。

importできる変数と関数

tkfilter.pytkFilter という単一のクラスを公開しています。このクラスのインスタンスを作成することで、提供されるすべての機能にアクセスできます。

クラス: tkFilter

データフィルタリングと管理のための主要なクラスです。tklib.tkObject を継承しています。

メソッド

  • __init__(self, app, cparams, plugin_dir, module_file, target = "read_data", is_print = False, **args)

    • tkFilter クラスのコンストラクタです。

    • 引数:

      • app: アプリケーションのインスタンス(通常は tklib アプリケーションオブジェクト)。

      • cparams: 設定パラメータを含むオブジェクト。

      • plugin_dir: プラグインモジュールが配置されているディレクトリのパス。

      • module_file: ロードするモジュールのファイル名マスク(例: "data_*.py")。

      • target (str, 省略可能, デフォルト: "read_data"): ロードするモジュールが提供すべきメソッド名。

      • is_print (bool, 省略可能, デフォルト: False): ロード中に情報を出力するかどうか。

      • **args: update メソッドに渡される追加のキーワード引数。

    • 戻り値: なし

  • __del__(self)

    • デストラクタです。現在の実装では特に処理を行いません。

    • 引数: なし

    • 戻り値: なし

  • __str__(self)

    • オブジェクトの文字列表現を返します。tklib.tkObjectClassPath() メソッドを呼び出します。

    • 引数: なし

    • 戻り値: オブジェクトのクラスパスを示す文字列。

  • load(self, target = None, is_print = None)

    • 指定されたプラグインディレクトリからフィルタモジュールをロードします。

    • 引数:

      • target (str, 省略可能): ロードするモジュールが提供すべきメソッド名。指定されない場合はインスタンスの self.target が使用されます。

      • is_print (bool, 省略可能): ロード中に情報を出力するかどうか。指定されない場合はインスタンスの self.is_print が使用されます。

    • 戻り値:

      • tuple: ロードされたモジュール名のリストと、ロードされたモジュールオブジェクトのリストのペア。

  • read_datalist(self, idata = None, imodule = 0, infile = None, target = '', app = None, cparams = None, is_print = False)

    • 指定されたモジュールを使用して、複数のデータ項目を読み込みます。idata がリストまたはタプルの場合に read_data から呼び出されます。

    • 引数:

      • idata (int, str, list, or tuple): 読み込むデータの識別子。

        • int: 最初の領域からのスペクトルインデックス。

        • str: ラベルを検索する正規表現。

        • list または tuple: [iregion, ispectrum] の形式で、領域インデックスとスペクトルインデックスを指定。

      • imodule (int, 省略可能, デフォルト: 0): 使用するモジュールリスト内のインデックス。

      • infile (str, 省略可能): 読み込むデータファイルのパス。

      • target (str, 省略可能, デフォルト: ''): モジュールロード時のターゲットメソッド名。

      • app, cparams (省略可能): モジュールに渡されるアプリケーションオブジェクトと設定パラメータ。

      • is_print (bool, 省略可能, デフォルト: False): 処理中に情報を出力するかどうか。

    • 戻り値:

      • tuple: 読み込まれたラベルのリスト、データのリスト、およびファイル情報の辞書 inf

  • read_data(self, imodule = 0, infile = None, idata = None, target = '', app = None, cparams = None, is_print = False)

    • 指定されたモジュールを使用してデータファイルを読み込みます。idata の型によって単一または複数のデータ項目を処理します。

    • 引数:

      • imodule (int, 省略可能, デフォルト: 0): 使用するモジュールリスト内のインデックス。

      • infile (str, 省略可能): 読み込むデータファイルのパス。

      • idata (int, str, list, or tuple, 省略可能): 読み込むデータの識別子。リストまたはタプルの場合、read_datalist が呼び出されます。

      • target (str, 省略可能, デフォルト: ''): モジュールロード時のターゲットメソッド名。

      • app, cparams (省略可能): モジュールに渡されるアプリケーションオブジェクトと設定パラメータ。

      • is_print (bool, 省略可能, デフォルト: False): 処理中に情報を出力するかどうか。

    • 戻り値:

      • dict: ファイル情報を含む辞書 infidata がリストまたはタプルの場合は、read_datalist の戻り値。

  • print_line(self, data_list, format = '{:^10}')

    • tklib.tkutils.print_line を呼び出して、データリストを整形して1行で出力します。

    • 引数:

      • data_list (list): 出力するデータ項目を含むリスト。

      • format (str, 省略可能, デフォルト: '{:^10}'): 各データ項目に適用するフォーマット文字列。

    • 戻り値: なし

  • print_data(self, labels = None, data_list = None, label_format = '{:^10}', data_format = '{:>10}', header = None, print_level = 0)

    • tklib.tkutils.print_data を呼び出して、ラベルとデータリストを整形して出力します。

    • 引数:

      • labels (list or None, 省略可能, デフォルト: None): 各データのラベルリスト。

      • data_list (list or None, 省略可能, デフォルト: None): 出力するデータのリスト。

      • label_format (str, 省略可能, デフォルト: '{:^10}'): ラベルに適用するフォーマット文字列。

      • data_format (str, 省略可能, デフォルト: '{:>10}'): データに適用するフォーマット文字列。

      • header (str or None, 省略可能, デフォルト: None): 出力の上部に表示するヘッダー文字列。

      • print_level (int, 省略可能, デフォルト: 0): 出力の詳細レベル。

    • 戻り値: なし

  • get_hash_data(self, idx, inf = None)

    • 読み込まれたデータから、ラベルをキーとするハッシュ(辞書)を作成して返します。idx 引数は現在の実装では使用されていません。

    • 引数:

      • idx: (現在の実装では未使用)

      • inf (dict or None, 省略可能, デフォルト: None): データ情報を含む辞書。指定されない場合は self.inf が使用されます。

    • 戻り値:

      • dict: ラベルをキーとし、対応するデータ配列を値とする辞書。

  • find_label_index(self, regexp, flag = '', inf = None)

    • 指定された正規表現またはインデックスに基づいて、ラベルの領域インデックスとスペクトルインデックスを検索します。

    • 引数:

      • regexp (int or str):

        • int: 最初の領域からのスペクトルインデックス。この場合、戻り値の領域インデックスは 0 になります。

        • str: 検索する正規表現文字列。

      • flag (str, 省略可能, デフォルト: ''): regexp が文字列の場合、re.search に渡すフラグ(例: re.IGNORECASE)。regexp が整数型の場合は使用されません。

      • inf (dict or None, 省略可能, デフォルト: None): データ情報を含む辞書。指定されない場合は self.inf が使用されます。

    • 戻り値:

      • tuple: 領域インデックス iregion とスペクトルインデックス ispectrum のペア。見つからない場合は (None, None)

  • find_data_array(self, regexp, flag = '', inf = None)

    • 指定された正規表現またはインデックスに基づいて、対応するラベルとデータ配列を検索し、返します。

    • 引数:

      • regexp (int or str):

        • int: 領域インデックス。

        • str: ラベルを検索する正規表現文字列。

      • flag (int or str, 省略可能, デフォルト: ''):

        • regexpint の場合: スペクトルインデックス。

        • regexpstr の場合: find_label_index に渡される re.search のフラグ。

      • inf (dict or None, 省略可能, デフォルト: None): データ情報を含む辞書。指定されない場合は self.inf が使用されます。

    • 戻り値:

      • tuple: 見つかったラベルとデータ配列のペア。見つからない場合は (None, None)

main scriptとして実行したときの動作

tkfilter.py のソースコードには、if __name__ == "__main__": ブロックが存在しません。 したがって、このファイルを直接Pythonインタプリタで実行しても、特別な処理は実行されません。 本ライブラリは、他のPythonプログラムから tkFilter クラスをインポートして利用されることを前提として設計されています。