Pythonでcsv読み込み&書き込み
PythonでCSVファイルを読み込み、スプライン補間した後に、CSVファイルに出力する。出力するファイル名にはタイムスタンプをつける。というプログラム。
プログラム
Python 3.8.1
import csv import numpy as np import datetime from scipy import signal, interpolate from matplotlib import pylab as plt #現在の日時を取得する now = datetime.datetime.now() #読み込むcsv。ソースと同じフォルダに置く。 fi = '04_peak.csv' #出力するcsvの名前を定義する。末尾にタイムスタンプ入れる。 fo = '04_peakResult_{0:%Y%m%d%H%M%S}.csv'.format(now) #csvを読み込んでdata_arrayに格納 with open(fi, mode='r', newline='') as f_in: reader = csv.reader(f_in) data_array = [row for row in reader] #デバッグ用:data_arrayの中身を確認する #print(data_array) #print(type(data_array)) #data_arrayを1次元配列(リスト)に分けるための配列を定義する plot_x = [] plot_y = [] #data_arrayの要素を一個ずつ取り出して、各リストに格納する for i in data_array: plot_x.append(float(i[0]))#要素は文字列として扱われているのでfloatに変換する plot_y.append(float(i[1])) #linspaceにx軸データ範囲が必要なのでplot_xの最小値/最大値を調べる xs = min(plot_x) xm = max(plot_x) #print("x軸の最小値は",xs) #print("x軸の最大値は",xm) #lilnspaceでデータ補間数を決める tt = np.linspace(xs, xm, 100) #print(tt) #2次スプライン補間 f = interpolate.interp1d(plot_x, plot_y, kind="quadratic") y = f(tt) #補間後のx,yをnp.arrayで結合し、エクセルで使いやすいように転置する。 yArry = np.array([tt, y]) yArry_t = yArry.T #print(yArry) #print(type(yArry)) #print(yArry_t) #print(type(yArry_t)) #csvに出力する。 with open(fo, mode='a') as f_out: csvWriter = csv.writer(f_out, lineterminator = '\n') csvWriter.writerows(yArry_t) #データプロット plt.plot(plot_x, plot_y,"r") plt.plot(tt, y) plt.show()
[04_ReadWriteCsv_001.py]