理系母の趣味はプログラミング

理系院卒、メーカー技術職の二児の母が、PythonやVBAで色々と作ってアップしていくブログです。

【16日目】ファイル操作③CSVファイルを読み書きする

こんばんは、なぺです。
今日はファイル操作の最後、CSVファイルを扱います。
産休前は何かとお世話になっていたCSVファイル。
いずれはエクセルとも連携したいし、きっと大事だよね。

ということでまずはCSVについてちゃんと知ることから。

CSVはComma Separated Values=カンマで区切られた値、の略語です。
その名の通り、中身はカンマで区切られたデータです。

one, two, three
for, five, six

こんなの

では、PythonCSVファイルを作ってみます。
CSVを扱うときは、組み込みモジュールCSVを使います。

import csv #csv組み込みモジュールを使わせて宣言

with open("test.csv", "w",newline="") as f:   #newline=""がないと行間が一行分空く
    w = csv.writer(f, delimiter=",") #ファイルオブジェクトfを、デリミタ=","でcsv化しwに格納
    w.writerow(["one","two","three"]) #リストをCSVに1行分書き出す
    w.writerow(["four","five","six"]) #リストをCSVに1行分書き出す

test.csvというcsvファイルを出力することができました。
エクセルで開くと、

one two three
four five six

と、一つずつ、セルに入った状態になっております。

open関数のオプション引数newline=""についてはよくわかりませんでしたが、これなしで実行すると、one, two, three,とfour,five,sixの間に空の行が一行分挿入されてしまったので、指定したほうがいいみたいです。
また、writerowは一行の書き出ししか行わないので、出力したい行数分繰り返す必要があります。多分ループとか使ってうまくやるのだろう…。

出力の次は、読み込みます。

前回やったのと同じで、open関数の第二引数に"r"を指定します。

import csv #csv組み込みモジュールを使わせて宣言

with open("test.csv", "r") as f:#読み込みモード引数に"r"を指定
    r = csv.reader(f, delimiter=",") #ファイルオブジェクトfを、デリミタ=","で呼び出し、wに格納
    for row in r: #rの要素分ループする。ループする度に変数rowに要素を格納
        print(",".join(row)) #rowに格納された要素を","をはさんで出力

#出力結果↓
one,two,three
four,five,six


カンマで区切られた文字列を出力できました!
いつかCSVで書かれたデータベースを扱うときに使えますように!


CSVは以上です。
参考書でいうと、次はハングマンという吊られた人の絵が出てくるおどろおどろしいゲームを作るのですが、
今までのまとめなので、割愛します。

独学プログラマーのpart1が終わりました!
次はpart2です。


参考書はこちらです。

それではまた^^