この記事では、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 -
STEP2readerオブジェクトの生成
先ほど生成したファイルオブジェクトを
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 -
STEP2writerオブジェクトの生成
先ほど生成したファイルオブジェクトを
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ではモジュールが用意されていて簡単に扱うことができました。
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ
- csv --- CSV ファイルの読み書き


