tklib.tkcsv のソースコード

"""
CSVファイルを扱うユーティリティ関数とクラスを提供するモジュール。

:doc:`tkcsv_usage`
"""
import csv


from tklib.tkutils import terminate, pfloat, pint
from tklib.tksci.tkmatrix import make_matrix1
from tklib.tkdatafile import tkDataFile


[ドキュメント] def savecsv(outfile, x, y, ys): """ 3つのデータリスト (x, y, ys) をCSVファイルに保存します。 ヘッダー 'x', 'y(raw)', 'y(smooth)' を書き込み、その後に各行のデータを書き込みます。 ファイルオープンに失敗した場合はエラーメッセージを出力します。 :param outfile: 出力CSVファイルのパス。 :type outfile: str :param x: x軸データを含むリスト。 :type x: list :param y: 生のy軸データを含むリスト。 :type y: list :param ys: スムージングされたy軸データを含むリスト。 :type ys: list :returns: なし :rtype: None """ try: print("Write to [{}]".format(outfile)) f = open(outfile, 'w') except: # except IOError: print("Error: Can not write to [{}]".format(outfile)) else: fout = csv.writer(f, lineterminator='\n') fout.writerow(('x', 'y(raw)', 'y(smooth)')) # fout.writerows(data) for i in range(0, len(x)): fout.writerow((x[i], y[i], ys[i])) f.close()
[ドキュメント] class tkCSV(tkDataFile): """ CSVファイルを読み書きするためのクラス。 tklib.tkdatafile.tkDataFile を継承し、CSV固有のファイル処理機能を提供します。 CSVファイルのパス指定、読み書きモードの指定、自動オープンなどの機能を含みます。 """ def __init__(self, path = None, mode = 'r', OpenFile = 1, data_only = True, **args): """ tkCSVオブジェクトを初期化します。 親クラス tkDataFile の基本的なファイルハンドリング機能を持ちつつ、 CSVファイル特有のプロパティを初期化します。 `OpenFile` が真の場合、指定されたパスのファイルを読み込みモードで開きます。 :param path: CSVファイルのパス。指定がない場合はNone。 :type path: str, optional :param mode: ファイルオープンモード ('r', 'w', 'a'など)。デフォルトは 'r'。 :type mode: str, optional :param OpenFile: 初期化時にファイルを開くかどうかのフラグ。1で開く、0で開かない。 :type OpenFile: int, optional :param data_only: データを数値として読み込むかどうかのフラグ。現在は使用されていません。 :type data_only: bool, optional :param args: 親クラス tkDataFile に渡す追加のキーワード引数。 :type args: dict :returns: なし :rtype: None """ # super(tkFile, self).__init__(path, mode, **args) self.fp = None self.path = None self.mode = None self.path = self.IfYes(path is not None, path, self.path) self.mode = self.IfYes(mode is not None, mode, self.mode) self.cur_row = 0 self.cur_col = 0 self.wb = None self.ws = None self.update(**args) if OpenFile and self.path is not None: self.Open(self.path, self.mode, data_only) def __del__(self): """ tkCSVオブジェクトが破棄される際にファイルを閉じます。 オブジェクトがガベージコレクションされるときに自動的に呼び出され、 開いているファイルポインタを閉じます。 :returns: なし :rtype: None """ self.Close() def __str__(self): """ オブジェクトの文字列表現を返します。 このメソッドは、クラスの完全パス(例: `module.class`)を返します。 :returns: クラスのパス文字列。 :rtype: str """ return self.ClassPath()
[ドキュメント] def Read_minimum_matrix(self, close_fp = False, delimiter = ',', force_numeric = True): """ CSVファイルからヘッダーと数値データを読み込み、リストのリスト形式で返します。 ファイルを開き、ヘッダー行を読み込みます。 ヘッダーの列数に基づいてデータ列数を決定します。 各データ行を読み込み、指定されたデリミタで分割します。 `force_numeric` がTrueの場合、各値を浮動小数点数に変換しようとします。 変換できない場合は元の値を保持します。 読み込んだヘッダーとデータは、オブジェクトの `labelarray` および `datalistarray` 属性にも格納されます。 :param close_fp: 読み込み後にファイルポインタを閉じるかどうかのフラグ。Trueで閉じる、Falseで開いたままにする。 :type close_fp: bool, optional :param delimiter: CSVファイルの区切り文字。デフォルトはカンマ (',')。 :type delimiter: str, optional :param force_numeric: 読み込んだデータを強制的に数値に変換するかどうかのフラグ。Trueで数値変換を試みる。 :type force_numeric: bool, optional :returns: (labels, datalist) のタプル。 `labels` はヘッダーラベルのリスト (str)。 `datalist` は各列のデータを含むリストのリスト (float または str)。 :rtype: tuple[list[str], list[list[float|str]]] """ self.Open(self.path, 'r') f = csv.reader(self.fp, delimiter = delimiter) labels = [] row = next(f) for i in range(len(row)): v = row[i] if v is None or v == '': break labels.append(v) ncol = len(labels) # print("header=", labels) datalist = make_matrix1(ncol, type = 'list') for row in f: # print("row=", row) if row is None or len(row) < ncol: break for icol in range(ncol): if force_numeric: val = pfloat(row[icol]) else: val = pfloat(row[icol], defval = row[icol]) datalist[icol].append(val) icol += 1 if close_fp: self.Close() self.labelarray = labels self.datalistarray = datalist # print("data=", self.datalistarray) # print("labels=", labels) # print("data=", datalist) return labels, datalist