ブログ再開&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"で複数行(列数は各行とも同数に制限)を書き込めます.