Python

【Python】csvファイルの使い方【csvモジュール】

この記事では、Pythonでcsvファイルを読み書きする方法を解説します。

csvファイルとは、データや項目などをカンマ(,)で区切って書かれたテキストファイルのことを言います。ちなみに拡張子は「.csv」です。

例えば、以下のような感じで書かれています。

名前,年齢,性別
田中 慎一,23,男
片岡 理恵,33,女

それでは、csvの使い方を見ていきましょう❗️

csvモジュール

Pythonでcsvファイルを扱うには「csvモジュール」を使います。csvモジュールは標準ライブラリなので、インポートするだけで使用可能です。

import csv

# 処理



csvファイル 読み込み

csvファイルに書き込みを行うには、以下の手順で処理をします。

試しに、csvファイルを読み込んでみます。

import csv

with open('data.csv', newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
>> ['名前', '年齢', '性別']
>> ['田中 慎一', '23', '男']
>> ['片岡 理恵', '33', '女']

list()で変換すると二次元配列として取得できます。

import csv

with open('data.csv', newline='') as f:
    reader = csv.reader(f)
    print(list(reader))
>> [['名前', '年齢', '性別'], ['田中 慎一', '23', '男'], ['片岡 理恵', '33', '女']]

区切り文字(デミリタ)を指定

csv.readerは、デフォルトでカンマ(,)で区切られますが、delimiter引数を指定することで、デミリタを変更することができます。

例えば、以下のような「|」で区切られたデータがあったとして、

名前|年齢|性別
田中 慎一|23|男
片岡 理恵|33|女

delimiter引数に「|」を指定すれば、その部分で分割してくれます。

import csv

with open('data.csv', newline='') as f:
    reader = csv.reader(f, delimiter='|')
    print(list(reader))
>> [['名前', '年齢', '性別'], ['田中 慎一', '23', '男'], ['片岡 理恵', '33', '女']]

辞書として読み込む

辞書として読み込みたい場合は、csv.DictReaderを使います。デフォルトでは、keyに1行目の値、valueにそれ以降の値が渡されます。

import csv

with open('data.csv', newline='') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row)
>> {'名前': '田中 慎一', '年齢': '23', '性別': '男'}
>> {'名前': '片岡 理恵', '年齢': '33', '性別': '女'}

fieldnames引数でkeyを指定することもできます。

import csv

with open('data.csv', newline='') as f:
    reader = csv.DictReader(f, fieldnames=('name', 'age', 'gender'))
    for row in reader:
        print(row)
>> {'name': '名前', 'age': '年齢', 'gender': '性別'}
>> {'name': '田中 慎一', 'age': '23', 'gender': '男'}
>> {'name': '片岡 理恵', 'age': '33', 'gender': '女'}

バージョン3.6以降ではOrderedDict、3.8以降ではdictとして返されます。

csvファイル 書き込み

csvファイルに書き込みを行うには、以下の手順で処理をします。

試しに、csvファイルを新しく作成し、書き込んでみます。

import csv

# 書き込むデータ
row = ('田中 慎一', 23,'男')
rows = (('片岡 理恵', 33, '女'), ('川上 陽子', 16, '女'))

with open('data.csv', 'w') as f:
    writer = csv.writer(f)

    # 1行書き込み
    writer.writerow(row)
    # 複数行書き込み
    writer.writerows(rows)

上記コードを実行すると、以下のようなcsvファイルが作成されます。

data.csv

田中 慎一,23,男
片岡 理恵,33,女
川上 陽子,16,女

区切り文字(デミリタ)を指定

デフォルトでは、カンマ区切りでデータが出力されるが、delimiter引数を指定することでデミリタを変更することができます。

import csv

rows = (('田中 慎一', 23,'男'), ('片岡 理恵', 33, '女'), ('川上 陽子', 16, '女'))

with open('data.csv', 'w') as f:
    writer = csv.writer(f, delimiter='|')
    writer.writerows(rows)

上記コードを実行すると、以下のようなcsvファイルが作成されます。

data.csv

田中 慎一|23|男
片岡 理恵|33|女
川上 陽子|16|女

辞書を書き込む

辞書をcsvファイルに書き込むには、csv.DictWriterを使います。

import csv

p1 = {'名前': '田中 慎一', '年齢': '23', '性別': '男'}
p2 = {'名前': '片岡 理恵', '性別': '女'}

with open('data.csv', 'w') as f:
    # fieldnames引数にkeyの配列を指定
    writer = csv.DictWriter(f, fieldnames=('名前', '年齢', '性別'))

    # fieldnames引数で指定したkeyをヘッダーとして書き込む
    writer.writeheader()

    # writerowメソッドで書き込む(writerowsでもok)
    writer.writerow(p1)
    writer.writerow(p2)

上記のコードを実行すると、以下のようなcsvファイルが作成されます。

data.csv

名前,年齢,性別
田中 慎一,23,男
片岡 理恵,,女

まとめ

この記事では、Pythonでcsvファイルを読み書きする方法を解説しました。

csvファイルは互換性が高いのでそこそこよく使われますが、Pythonではモジュールが用意されていて、簡単に扱うことができました。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』