注目キーワード

【Python】CSVファイルの基本操作(読み込み)

はじめに

Pythonのツールを作るにあたって、CSVファイルからデータを読み込み、データベースに登録したかったのでCSVファイルの読み込み方法を調べました。CSVという標準のライブラリを使って操作が出来そうだったのでヘッダーを含め1行ずつ読み込む方法とディクショナリーを使う操作方法の2パターンをサンプルプログラムを使いながら紹介します。

Pythonのツールの記事をまだ読んでないかたは以下の記事もご覧ください。

対象レベル

Pythonの環境設定が整っており、Pythonの基本構文が理解出来ること。

詳しくは「【Python入門】〜初級編〜環境構築・基本構文まとめ」にまとめてあります。興味のある方はご覧ください。

CSVファイルの読み込み

実装例

実装したソースは以下になります。「csv_read1.py」はヘッダーを含めて1行ずつ読み込むパターンのソースです。そして「csv_read2.py」はディクショナリーを使うパターンのソースになります。

どちらも読み込むファイルは同じで、ファイルをオープンするところまでは同じです。

それでは、各ソースごとに細かく見ていきましょう。次の実行結果で解説していきます。

実行結果➀ ヘッダーを含め一行ずつ読み込む場合

まず初めに「 csv_read1.py 」の実行結果を見ていきましょう。

こちらは reader メソッドを使用します。

実行結果は以下になります。出力されたデータは大きく分けると以下の3つのグループに分けることができます。

  • ヘッダー行
  • データ行(next)
  • データ行 × 2
csv_read1.py の実行結果

ソースの6行目でcsvファイルの1行目のヘッダー行を取得し、8行目のprintで取得した配列を表示しています。nextを使うと先頭の行を取りだして変数に代入することが出来ます。

   header = next(reader) print("ヘッダー行:") print(header)
csvファイル1行目

次に10行目でcsvファイルの2行目(1件目のデータ)を取得し、12行目のprintでデータの内容を出力しています。

 data = next(reader) print("データ行(next):") print(data)
csvファイル2行目

最後に14行目以降の『データ行』の繰り返しです。nextを使わないでfor文を使っても行の取得は可能です。

また、取得したデータは配列なのでインデックスを指定すれば各列の値も取得可能です。

 for row in reader:  print("データ行:")  print(row)  print("名前:" + row[0])  print("国語:" + row[1])  print("算数:" + row[2])  print("英語:" + row[3])
csvファイル3行目、4行目

実行結果② ディクショナリーを使う場合

次に、ディクショナリーを使う方法です。

スポンサーリンク

こちらは DictReader メソッドを使用します。

こちらは、1件目に取得されるデータはヘッダー行ではなくデータ行の1件目になります。また配列ではなくディクショナリで取得されています。

csv_read2.py の実行結果

また、各カラムにアクセスする方法は「 row[“カラム名”] 」または「 row.get(“カラム名”) 」でアクセスできます。7行目、8行目が該当のソースになります。

  print(row["名前"])  print(row.get("国語"))
データ1行目の名前と国語の取得

まとめ

csvファイルの読み込みには「 reader 」または「 DictReader 」をつかう。

「 reader 」は配列としてレコードを取得し、インデックスを指定 するとカラムの値が取得できる。

「 DictReader 」はディクショナリーとして取得し、カラムの値を取得する場合は「 row[“カラム名”] 」または「 row.get(“カラム名”) 」 で取得する。

1件目からデータ行が取得できるので 「 DictReader 」 のほうが使い勝手がよさそう。