PythonのcsvモジュールでCSVファイルの読み込み書き込みをしよう

こんにちは。関東の大学に通う大学生ミンチ(@programminchi)です。今回はPythonのcsvモジュールを使って、CSVファイルというものを扱っていきます。

CSVファイルに書き込みをしたり、その内容を読み込んだりと実用的な内容になっていて、知っていると役に立つ情報だと思うので、是非一度勉強していってください。

 

 

CSVファイルとは?

CSVファイルとはカンマ区切りで値が入れられたテキストファイル(文字データだけが含まれるファイル)で、拡張子はcsvです。

csvは「comma separated value」の略で、日本語に直すと「カンマで区切られた値」という風になります。

CSVファイルはそのままエクセルで開くことができ、それぞれのセルに1つの値が入ります。

 

CSVファイルは基本的にカンマと値だけで構成されています。

しかし一部例外があったり、1行目に列名が含まれていたりと、まちまちな構造をしているので普通は標準で備わっているcsvモジュールを使って扱われます。

ちなみにcsvモジュールは以下のようにしてインポートしておきましょう。

import csv

 

 

reader関数によるCSVファイルの読み込み

それではまずはCSVファイルを読み込んでいきましょう。

前提としてファイルを開いたりする際にはwith文を使いますが、with文については以下の記事で解説しているので参考にしてください。

 

【Python】ファイルの読み込み書き込みをやってみよう

 

 

簡単なCSVファイルの用意する

それでは最初にCSVファイルを用意していきます。

以下のようにしてください。

 

fru = '''apple,リンゴ
cherry,さくらんぼ
melon,メロン
grape,ブドウ'''

with open('fruits.csv', 'w') as f:
    f.write(fru)

with文を使って文字列fruをCSVファイル、fruits.csvの中に書き込んでいます。

fruits.csvの中身は以下のようになっています。

apple,リンゴ 
cherry,さくらんぼ 
melon,メロン 
grape,ブドウ

 

 

CSVファイルを読み込み、リスト形式で出力する

それでは前準備ができたので上で作ったCSVファイルを読み込んでいきましょう。

まずは以下のコードを見てください。

 

with open('fruits.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

#以下は出力
['apple', 'リンゴ']
['cherry', 'さくらんぼ']
['melon', 'メロン']
['grape', 'ブドウ']

1行目ではwith文を使ってCSVファイル、fruits.csvを開き、それに fと名前を付けています。

2行目ではcsvモジュールの中のreader関数を使って開いたファイル(f)を読み込んでいます。

そして読み込んだファイルオブジェクトにreaderという名前を付けています。

 

最後にfor文でreaderから1つずつ取り出し、出力しています。

CSVファイルから読み込まれた各行は文字列のリストとして出力されるので、出力は上のように行ごとにリストになって現れます。

 

CSVファイルを読み込み、文字列として出力する

上のようにリストではなく単純に文字列として出力する方法も見ていきましょう。

コードは上のものとほとんど同じでprint文の引数を変えるだけです。

 

with open('fruits.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        print(', '.join(row)) 
#以下は出力 
apple, リンゴ
cherry, さくらんぼ
melon, メロン
grape, ブドウ

先ほどと違って、print文の中でjoin関数を使っています。上のようにjoin関数を使うと、出力で文字列が得られます。

join関数(その他文字列を扱うための関数)については以下の記事で詳しく解説しているので参考にしてください。

 

pythonで文字列を自在に扱うために覚えるべき7つの関数

 

 

 

writer関数によるCSVファイルへの書き込み

それでは次にCSVファイルへの書き込みをしていきましょう。

 

CSVファイルに1行書き込みをする

CSVファイルへの書き込みにはwriterオブジェクトを作って、その後にwriterow関数で実際に書き込みをしていきます。

ここでwriterow関数の引数にはリストを渡していきます。

以下の例を見てください。

 

fo = ['tomato', 'トマト']
with open('food.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerow(fo)

2行目ではwith文の引数でwを指定しているので書き込み専用のファイルオブジェクトができます。

3行目ではcsvモジュールの中のwriter関数を使ってwriterオブジェクトを作っています。

 

最後にwriterにwriterow関数を適用して、リストfoを渡すことでCSVファイル、food.csvの中に書き込みができました。

実際にfood.csvの中身は以下のようになっています。

tomato, トマト

 

 

CSVファイルに複数行書き込みをする

次にCSVファイルの中に一気に複数行書き込んでいきましょう。

以下のようにします。

 

ani = [
['elephant', 'ゾウ'],
['rabbit', 'うさぎ'],
['dog', 'イヌ'],
['cat', 'ネコ']
]

with open('animal.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerows(ani)

基本的に1行書き込みをする場合と変わらないが、1番最後はwriterow関数ではなく、writerows関数を使っていきます。

また、writerows関数に渡す引数はリストのリストになります。

animal.csvの中身は 以下のようになります。

 

elephant,ゾウ
rabbit,うさぎ
dog,イヌ
cat,ネコ

しっかり複数行書き込めているのが分かると思います。

 

 

まとめ

今回はCSVファイルを扱うということで、割と実用的な内容でした。

CSVファイルの読み込み、書き込み、また、with文の使い方などもしっかりマスターしておいてください。

 

今後も定期的にコンピュータ系の記事を発信していくので是非、興味のある人はツイッターの方もフォローお願いします!!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です