Pythonでcsvファイルの読み込みと書き込みをする
Pythonでcsvモジュールを使って、csvデータをファイルから読み込んだりファイルに書き込んだりしてみます。
目次
readerオブジェクトとwriterオブジェクト
csvモジュールでは、オープン済みのファイルからreaderオブジェクトを使ってデータを読み込みます。書き込むときは同様にwriterオブジェクトを使って書き込みます。
r = csv.reader(f)
変数 |
内容 |
---|---|
r |
readerオブジェクト。 |
f |
ファイルオブジェクト。 |
w = csv.writer(f)
w.writerows(d)
変数 |
内容 |
---|---|
w |
writerオブジェクト。 |
f |
ファイルオブジェクト。 |
d |
書き込むデータ。 |
読み込み書き出しの実施例
こういうのは実際のコードを見た方が簡単に理解できます。
例えば、こういうcsvデータがsample.csvに保存されているとします。
# col1, col2, col3
A1,"B1",-1
A2,"B2",0
A3,"B3",1
これを読み込んで、そのままout.csvというファイルに書き出してみます。
>>> import csv
>>> # 読み込み
>>> with open('sample.csv', mode='r', newline='', encoding='utf-8') as fi:
... csv_reader = csv.reader(fi)
... read_data = [row for row in csv_reader]
...
>>> read_data # 読みやすいように改行だけ整形しました
[
['# col1', ' col2', ' col3'],
['A1', 'B1', '-1'],
['A2', 'B2', '0'],
['A3', 'B3', '1']
]
>>> # 書き込み
>>> with open('out.csv', mode='w', newline='', encoding='utf-8') as fo:
... csv_writer = csv.writer(fo)
... csv_writer.writerows(read_data)
...
>>>
途中で読み込んだデータを表示してます。それを見ると、読み込んだデータは全体で1つのリストになっていてそのリストの中に各行毎のリストがネストされて格納される形になっています。全体のリストに1行ずつ順番にappendされていると言った方がわかりやすいですかね。
よく行頭に#を付けて列のタイトルを付けたりしますが、そういうのは無視されてcsvデータとして取り込まれています。csvのルールには本来コメント行はありませんので、ルールに従って読み込まれたという感じです。
データ前後のダブルクォーテーションは取り除かれました。
数値が文字列として読み込まれています。
このリストをそのままcsvに出力すると、そのファイルの中身はこのようになります。
# col1, col2, col3
A1,B1,-1
A2,B2,0
A3,B3,1
リストの中身がそのまま出力されました。
公開日
広告