Python PR

【Python】CSVファイルを読み書きする方法【csvモジュール】

記事内に商品プロモーションを含む場合があります

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

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

互換性が高いのでよく使用されます。

それでは、CSVファイルを読み書きする方法を見ていきましょう!

CSVファイルを読み書きするには...

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

import csv

Linkcsv --- CSV ファイルの読み書き — Python ドキュメント

CSVファイルを読み込む

CSVファイルを読み込むには、以下の手順で処理をします。

  • STEP1
    ファイルオブジェクトの生成

    open()関数で読み込みたいファイルのファイルオブジェクトを生成します。この時、open()関数のオプションは、'r'を指定しますが、デフォルト値なので記述は必要ありません。csvfileがファイルオブジェクトの場合、 newline=''として開く。

    with open('ファイル名', newline='') as f:
        pass

    open関数を使ってファイルを読み書きする方法

  • STEP2
    readerオブジェクトの生成

    先ほど生成したファイルオブジェクトをcsv.readerコンストラクタの引数として渡し、readerオブジェクトを生成します。

    reader = csv.reader(f)
  • STEP3
    読み込む

    readerオブジェクトは、for文で処理できます。

    for row in reader:
        print(row)

    また、list()tuple()で変換も可能です。

    print(list(reader))
    print(tuple(reader))

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

import csv

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

実行結果

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

readerオブジェクトを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': '女'}

Python 3.6以降ではOrderedDict、3.8以降ではdictとして返されます。

CSVファイルの書き込み

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

  • STEP1
    ファイルオブジェクトの生成

    open()関数で書き込みたいファイルのファイルオブジェクトを生成します。この時、open()関数のオプションは、新しくファイルを作成する場合'w'、既に存在するファイルに追記する場合、'a'を指定します。

    with open('ファイル名', 'wかa') as f:
        pass

    open関数を使ってファイルを読み書きする方法

  • STEP2
    writerオブジェクトの生成

    先ほど生成したファイルオブジェクトをcsv.writerコンストラクタの引数として渡し、writerオブジェクトを生成します。

    writer = csv.writer(f)
  • STEP3
    書き込む

    writerオブジェクトのwriterowメソッド使って行単位で書き込むことができます。

    writer.writerow(追加する行)

    複数の行をまとめて追加したい場合は、writerowsメソッドを使います。

    writer.writerows(追加する行たち)

書き込み
試しに、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ではモジュールが用意されていて簡単に扱うことができました。

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