Python

Pythonでcsv, tsvファイルを扱う~csvモジュールの使い方~

csv, tsvファイルをpythonで扱うには、標準ライブラリcsvモジュール(import csv)を必ず使います(pandasとか特別な処理は別として)

なぜなら、ややこしい..csvの改行とか、区切り文字とか、エスケープ文字とかの問題を容易く扱えるようになるからです。少なくとも普通のファイルを開くようなやり方でcsv, tsvファイルを扱ってはダメです!

このページでは、実務で利用するcsvモジュールの使用方法を記載します。

csvファイルの読込み(csv.reader)

以下のようなファイルを読み込みましょう

with openで読み込んだファイルをオブジェクトを引数にcsv.readerを呼び出すとファイルの中身を読み込むことができます。 forループを用いて、一行ずつ読み込むことができます。

例えば、ファイルのなかで改行がある場合、quotecharでクオート文字を指定します。以下のようなcsvを読み込もう!

  • csvが途中で改行されている場合の読込み

csvファイルの読込み(csv.DictReader)

DictReaderとは、csvでファイルを読み込む際にヘッダーはヘッダーで、中身は中身で読み込みたい。 そんな時に便利なやり方です

女の子A
女の子A
例えば以下のようなヘッダー付きのcsvがあった場合、DictReaderでそのまま指定しましょう。delimiterでカンマ区切りかタブ区切りか指定します。

  • csvの1行目がヘッダーになっている場合

csv.DictReaderの第一引数にファイル入力インスタンスを指定します

女の子A
女の子A
csvにヘッダーがない場合もヘッダーがあるかのように扱いたいということもあるかもしれないですね。その方が便利ですから。例えば、以下のような例です。この場合はfieldnamesでヘッダーを指定します

  • csvにヘッダーがない場合

csv.DictReaderのfieldsnamesで指定しています。

CSVファイルへの書き込み(csv.writer)

  • プログラム

csv.writerでファイル出力用のインスタンスを作成します。作成の際には以下のパラメータを指定する

  • 出力ファイル

  • csv.writerの引数
delimter 区切り文字を指定、\tの場合はタブ、デフォルトはカンマ(,)
quotechar 改行を含むフィールドを囲う際に用いられる文字(クオート文字)
quoting QUOTE_ALL: すべてのフィールドをクオートする
QUOTE_MINIMAL: quotecharや改行など特別な文字だけクオートする
QUOTE_NONNUMERIC: 非数値のフィールドだけクオートする
QUOTE_NONE: クオートしない

csvファイルへのヘッダーを指定して書き込み(csv.DictWriter)

  • プログラム

csv.DictWriterでファイル出力用のインスタンス作成。fieldsnameでヘッダーを指定する。writerowでは、辞書を指定する。

  • 出力ファイル

まとめ

  • csvファイルの読込みには、csv.readerで、delimiterは区切り文字、quotecharはクオート文字を指定します
  • 辞書形式で読込みには、csv.DictReaderを利用します
  • csvファイルの書き込みには、csv.writerで、delimiterは区切り文字、quotecharはクオート文字を指定します
  • 辞書形式での書き込みは、csv.DictWriterで、writeheaderでヘッダーの書き込み、writerow, writerowsで書き込みを行います。
↓↓Pythonについてもっと知りたい!というかたはこちら、Pythonの基本文法から標準ライブラリ、応用ライブラリまで収録!!
【2020年版】: Python 3.8 データ構造、文法、アルゴリズム、オブジェクト指向、ライブラリ、完全マスター講座