tkdatafile.py ライブラリ技術ドキュメント
ライブラリの機能や目的
tkdatafile.py は、tklib ライブラリの一部として提供されるデータファイル操作のためのPythonライブラリです。これは主に、ラベルとそれに紐づくデータ配列を持つ構造化されたテキストデータを扱うことを目的としています。基底クラスである tkFile の機能を拡張し、データの検索、取得、変換機能を提供します。
主な機能は以下の通りです。
データ格納:
labelarray(ラベルのリスト) とdatalistarray(データ配列のリスト) を内部に保持し、構造化されたデータを取り扱います。ラベル/インデックス検索: 正規表現または数値インデックスを使用して、特定のデータセットのラベルインデックスを効率的に検索します。この際、空白や括弧の違いを吸収し、大文字小文字を無視した検索も可能です。
データ配列の取得: 検索したラベルインデックスに基づいて、対応するデータ配列とそのラベルをペアで取得します。
データ型変換: 取得したデータ配列の各要素を、
floatやintなどの指定された型に一括で変換する機能を提供します。複数データの一括読み込み: 複数のラベルやインデックスに対応するデータセットを一度に取得できます。
このライブラリは、実験データ、設定ファイル、ログファイルなど、特定のヘッダー(ラベル)の下に数値データが並ぶ形式のファイルをプログラム的に解析し、必要なデータ要素を柔軟に抽出する場面で特に有用です。
importする方法
tkdatafile.py を他のPythonプログラムから利用するには、tkDataFile クラスをインポートします。
from tkdatafile import tkDataFile
必要な非標準ライブラリとインストール方法
このライブラリは、tklib というカスタムライブラリに依存しています。tklib は標準ライブラリではないため、別途インストールが必要です。
現在、tklib のインストール方法は明示されていませんが、一般的には pip を使ってインストールできる形式で提供されていることが多いです。もしtklibがPyPIに登録されていれば、以下のコマンドでインストールできます。
pip install tklib
もし tklib がローカルファイルまたは特定のバージョン管理システムからインストールする必要がある場合は、その指示に従ってください。tkdatafile.py と同じディレクトリ、またはPythonの検索パスが通っているディレクトリに tklib パッケージが配置されている必要があります。
tklib の内部モジュールである tklib.tkutils、tklib.tkfile、tklib.tkinifile、tklib.tkre がこのライブラリで使用されています。
importできる変数と関数
tkdatafile.py ライブラリは、tkDataFile クラスを主要なインターフェースとして提供します。直接インポートできる変数はありません。
クラス
tkDataFile
tklib.tkfile.tkFile を継承するデータファイル操作クラスです。内部的に self.labelarray と self.datalistarray というリストを保持し、それぞれデータファイルのラベル(ヘッダー)とそれに対応するデータ配列を格納します。
メソッド:
__init__(self, path=None, mode='r', OpenFile=True, **args)動作:
tkDataFileオブジェクトを初期化します。基底クラスtkFileのコンストラクタを呼び出し、labelarrayとdatalistarrayを空のリストとして初期化します。引数:
path(str, optional): 扱うファイルのパス。デフォルトはNone。mode(str, optional): ファイルを開くモード(例:'r'読み込み、'w'書き込み)。デフォルトは'r'。OpenFile(bool, optional): オブジェクト初期化時にファイルを開くかどうか。デフォルトはTrue。**args:tkFileのコンストラクタに渡される追加のキーワード引数。
戻り値: なし
__del__(self)動作: オブジェクトが破棄される際に呼び出されるデストラクタです。開いているファイルがあれば閉じ、基底クラスのデストラクタを呼び出します。
引数: なし
戻り値: なし
__str__(self)動作: オブジェクトの文字列表現を返します。
引数: なし
戻り値:
str。クラスのパスを示す文字列。
sort(self, lists)動作: 入力されたリストのリストをソートします。
tklib.tkutils.sort_lists関数へのラッパーです。引数:
lists(list of list): ソートする対象のリストのリスト。
戻り値:
list of list。ソートされたリストのリスト。
find_label_index(self, regexp, flag=None, flags='')動作:
self.labelarrayに格納されているラベルの中から、指定された正規表現regexpまたは直接インデックス(整数)に一致するラベルのインデックスを検索します。このメソッドは、検索時に空白文字や括弧[]()の違いを吸収し、flags='i'を指定することで大文字小文字を無視した検索も可能です。内部でreモジュールとtkre.Searchを利用します。引数:
regexp(str or int): 検索する正規表現文字列、または直接指定するインデックス(整数)。flag(int, optional):reモジュールで使用されるフラグ(例:re.IGNORECASE)。flags引数の古い形式であり、非推奨です。flags(str or int, optional):reモジュールで使用されるフラグ。文字列'i'を指定するとre.IGNORECASEと同等に扱われます。
戻り値:
int。一致したラベルのインデックス。見つからない場合はNone。
find_data_array(self, regexp, flag=None, flags='', convert_type=None, def_val=None)動作:
find_label_indexメソッドを使ってラベルのインデックスを特定し、そのインデックスに対応するラベル (self.labelarrayから) とデータ配列 (self.datalistarrayから) を返します。convert_typeが指定された場合、データ配列の各要素をその型に変換します(floatやintなど)。変換にはtklib.tkutils.pfloatやtklib.tkutils.pintが使用されます。引数:
regexp(str or int): 検索する正規表現文字列、または直接指定するインデックス(整数)。flag(int, optional):find_label_indexに渡されるreフラグ。flags(str or int, optional):find_label_indexに渡されるreフラグ。convert_type(type, optional): データの要素を変換する型(例:float,int)。変換しない場合はNone。def_val(any, optional): 変換に失敗した場合に使用するデフォルト値。現在の実装ではconvert_typeが指定された場合、元の値をそのまま返すため、この引数は実質的に影響しない可能性があります。
戻り値:
tuple。(label, data_array)の形式。labelは見つかったラベル(str)、data_arrayは対応するデータリスト(list)。ラベルが見つからない場合は(None, None)。
FindLabelIndex(self, regexp, flag=None, flags='')動作:
find_label_indexメソッドのエイリアス(別名)です。引数:
find_label_indexと同じ。戻り値:
find_label_indexと同じ。
FindDataArray(self, regexp, flag=None, flags='')動作:
find_data_arrayメソッドのエイリアス(別名)です。引数:
find_data_arrayと同じ。戻り値:
find_data_arrayと同じ。
read_data(self, idata=[], flags='', convert_type=None, def_val=None, is_print=True)動作: 複数のインデックスまたは正規表現のリスト
idataに基づいて、複数のラベルと対応するデータリストをまとめて読み込みます。リストの各要素についてfind_data_arrayを呼び出し、結果をリストに集約して返します。引数:
idata(list of str or int, optional): 取得したいラベルの正規表現またはインデックスのリスト。デフォルトは空リスト。flags(str or int, optional):find_data_arrayに渡されるreフラグ。convert_type(type, optional): データの要素を変換する型。find_data_arrayに渡される。def_val(any, optional): 変換失敗時のデフォルト値。find_data_arrayに渡される。is_print(bool, optional): 現在のコードではこの引数は使用されていません。デフォルトはTrue。
戻り値:
tuple。(labels, data_list)の形式。labelsは見つかったラベルのリスト(listofstr)、data_listは対応するデータリストのリスト(listoflist)。
main scriptとして実行したときの動作
tkdatafile.py のソースコードには、if __name__ == '__main__': ブロックが存在しません。
したがって、このファイルを直接Pythonインタプリタで実行しても、特別なスクリプトとしての動作は行われません。通常、ライブラリファイルとして他のプログラムからインポートされ、その機能が利用されることを想定しています。