ブログ再開&Pythonでのcsvの入出力
半年くらい放置してたんですけど,ソースコードの備忘録をつけたいので再開します!
当面はPython+機械学習(あと,できればMATLAB/Simulinkでの制御シミュレータ)をネタとして書いていきます.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
今回は,データ形式としてメジャーなcsv形式のファイルのPythonでの入出力を行います.
csvファイルの入力
下記に2通りのcsv入力関数(method_01,02)を載せています.
#coding:utf-8 ''' Purpose: input csv_file ''' import csv import numpy as np def method_01(read_file,head_num,req_col): # read_file <- filename you wanna use # head_num <- number of header's rows # req_col <- list which has column's number reader = csv.reader(file(read_file)) data = [] row_count = 0 for row in reader: if row_count >= head_num: row_sub = [] col_count = 0 for elem in row: if col_count in req_col: row_sub.append(float(elem)) col_count += 1 data.append(row_sub) row_count += 1 return data # this object type is "list". def method_02(read_file,req_col,skip_header=True): # read_file <- filename you wanna use # req_col <- list which has column's number # skip_header <- True or False data_src = np.genfromtxt(read_file,skip_header=skip_header,delimiter=',') data = data_src[:,req_col] return data # this object type is "numpy.array".
"method_01"はcsv.readerで各行をパースすることで,各要素に対して操作を加えることや(上記ではfloat(elem)で浮動小数点型にしています)
1行以上のヘッダにも対応させています.
また,"method_02"ではnumpyの組み込み関数genfromtxtを用いて簡潔化しています.
csvファイルの出力
# ----- sample01_writer = csv.writer(open('sample01.csv','w'),lineterminator='\n') sample01_writer.writerow(header) sample01_writer.writerow(row) # "row" is a list_object . # ----- sample02_writer = csv.writer(open('sample02.csv','w'),lineterminator='\n') sample02_writer.writerow(header) sample02_writer.writerows(rows) # "rows" is a list of rows .
基本的にはcsv.writerでインスタンスを作成し,それにメソッドで書きこんでいきます.
その際に".writerow"でリスト(1行),".writerows"で複数行(列数は各行とも同数に制限)を書き込めます.