あれもPython,これもPython

Pythonメモ※本サイトはアフィリエイトを利用しています

PythonでCSVファイルを扱う(リストや辞書とのインターフェイス)

Pythonでデータを扱う場合、
csvファイルを読み込んだり、出力することがあります。

そんな時は標準モジュールのcsvを使えば簡単です。

CSVをリストとして読み込む

csvモジュールのreader,writerを使うだけです。

読み込む

import csv
data = []

with open("file.csv","rb") as f:
    reader = csv.reader(f)

    for row in reader:
        data.append(row)

書き込む

import csv
output_data = ["書き込む","データ","だよ"]

with open("file.csv","wb") as f:
    writer = csv.writer(f)

    # csv用のヘッダーがデータにない場合は先に書いておく
    # writer.writerow(["header","data","だよ"])

    for data_row in output_data:
        writer.writerow(data_row)

csvを辞書として読み込む、書き込む

csvモジュールは、辞書として読み込んだり、辞書をcsvに書き込むクラスを持っています。
それら(DictReader,DictWriter)を使うと簡単。
リストで読み込んで辞書に直したりする必要がありません。

読み込み

import csv
data = []

with open("file.csv","rb") as f:
    reader = csv.DictReader(f)

    for row in reader:
        data.append(row)
        # rowは辞書型になる

書き込み

ヘッダーを書き込み用オブジェクトに渡すのと、ヘッダーを明示的に書き込むことに注意。

import csv
data = [{"辞書型":"データ","だ":"よ"}]

header = data[0].keys()#ヘッダー用のデータを作っておく

with open("file.csv","wb") as f:
    # headerも渡してやる
    # 渡した順番が列の順番になる
    writer = csv.DictWriter(f,header)

    # そのままだとヘッダーは書き込まれないので、ここで書く
    header_row = {"k":k for k in header}
    writer.writerow(header_row)

    for row in data:
        writer.writerow(row)

分析目的の場合

csvファイルを読み込み、データフレームとして分析や機械学習をかけるなら、pd.read_csv()の方が楽です。

esu-ko.hatenablog.com