• Skip to main content
  • Skip to secondary menu
  • Skip to primary sidebar
  • Skip to footer

AI活用エンジニアへの道

生成AI時代のエンジニアの生き方を考えるメディア(作成途中)

  • コラム
  • 生成AI
  • プログラミング
    • Python入門
    • Flask入門
    • Django入門
  • プロフィール
Home / プログラミング / Python / Pythonでcsv, tsv 読み込み、書き込みの使い方詳細

Pythonでcsv, tsv 読み込み、書き込みの使い方詳細

1 csvファイルの読込み(csv.reader)
2 csvファイルの読込み(csv.DictReader)
3 CSVファイルへの書き込み(csv.writer)
4 csvファイルへのヘッダーを指定して書き込み(csv.DictWriter)
5 まとめ
6 関連記事

csv, tsvファイルをpythonで扱うには、標準ライブラリcsvモジュール(import csv)を使う。

 

なぜなら、ややこしいcsvの改行とか、区切り文字とか、エスケープ文字とかの問題を容易く扱えるようになるからである。

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

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

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

Taro,18
Satoko,20
Jiro,40

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

  • ファイルの読みこみサンプル
with open(input_file_path) as fh: # ファイルの読込み(input_file_pathには上のファイルのパスを文字列で格納する)
    csv_reader = csv.reader(fh, delimiter=',', quotechar='|')
    for row in csv_reader:
        print(row) # ['Taro', '18'] ['Satoko', '20'] ['Jiro', '40']の順で表示
        print(row[0]) # Taro Satoko Jiroの順で表示
        print(csv_reader.line_num) # 0, 1, 2の順で表示

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

name,age
Taro,"1 ← ここが改行されている。改行とわかるように"で囲っている
8"
Satoko,20
Jiro,40
  • csvが途中で改行されている場合の読込み
with open('std_library/input.csv') as fh:
    csv_reader = csv.reader(fh, delimiter=',', quotechar='"') # quotecharでクオート文字を指定しています(デフォルトはダブルクオート)

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

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

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

Name,Age
Taro,18
Satoko,20
Jiro,40
  • csvの1行目がヘッダーになっている場合
# csv.DictReaderの第一引数にファイル入力インスタンスを指定する
with open(file_path) as fh:
    csv_reader = csv.DictReader(fh, delimiter=',')
    csv_header = csv_reader.fieldnames # これがヘッダーの一覧、例だとNameとAge
    for row in csv_reader: # 読み込んだcsvの中身をループする。rowには1行目2行目が入る。typeはDict
        print(row['Name']) # Nameだけ取り出したい場合、例だとTaro,Satoko,Jiro

csvにヘッダーがない場合も、ヘッダーがあるかのように扱いたいということもある。
例えば以下のような例。この場合はfieldnamesでヘッダーを指定する

Taro,18
Satoko,20
Jiro,40
  • csvにヘッダーがない場合
# csv.DictReaderのfieldsnamesで指定してする
with open(file_path) as fh:
    csv_reader = csv.DictReader(fh, delimiter=',', , fieldnames=['Name', 'Age']) # ここでfieldnamesを指定する。これがヘッダーになる
    for row in csv_reader: # 読み込んだcsvの中身をループする。rowには1行目2行目が入る。typeはDict
        print(row['Name']) # Nameだけ取り出したい場合、例だとTaro,Satoko,Jiro

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

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

  • csv.writerを利用したファイルへの出力
with open('std_library/output.csv', mode='a', newline='') as fh:
    csv_writer = csv.writer(fh, delimiter='\t', quotechar='"', quoting=csv.QUOTE_MINIMAL)# タブ区切りで出力
    csv_writer.writerows([['a','b','c'],[1,2,3]])# a b cと1 2 3を出力

実行した結果、以下のようにファイルに文字列が出力される

  • 出力ファイル
a b c
1 2 3

csv.writerにdelimiter, quotecharなどの引数はそれぞれ以下の意味を持っている。

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

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

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

  • csv.DictWriterを利用したファイルへの出力
with open('std_library/output.csv', mode='w', newline='') as fh:
    fieldnames = ['name', 'age']
    csv_writer = csv.DictWriter(fh, fieldnames=fieldnames) # デフォルトはカンマ(,)区切り
    # csv_writer = csv.DictWriter(fh, fieldnames=fieldnames, delimiter='\t') # タブ区切り

    csv_writer.writeheader() # ヘッダーの書き込み
    csv_writer.writerow({'age': 19, 'name': 'Taro'}) # nameに対して、Taro, ageに対して19で書き込み
    csv_writer.writerows([{'name': 'Hanako', 'age': 30}, {'name': 'Jiro', 'age': 40}]) # 複数行の書き込み

実行した結果、以下のように出力される

  • 出力ファイル
name,age
Taro,19
Hanako,30
Jiro,40

まとめ

  • csvファイルの読込みには、csv.readerで、delimiterは区切り文字、quotecharはクオート文字を指定
  • 辞書形式で読込みには、csv.DictReaderを利用
  • csvファイルの書き込みには、csv.writerで、delimiterは区切り文字、quotecharはクオート文字を指定
  • 辞書形式での書き込みは、csv.DictWriterで、writeheaderでヘッダーの書き込み、writerow, writerowsで書き込みを行う

Pythonについてもっと知りたい!というかたはこちら、Pythonの基本文法から標準ライブラリ、応用ライブラリまで収録!!
【2020年版】: Python 3.8 データ構造、文法、アルゴリズム、オブジェクト指向、ライブラリ、完全マスター講座

関連記事

Pythonの型ヒント:コレクション型とOptional型の使い方
Pythonの型ヒント:コレクション型とOptional型の…
Python型ヒントについて、変数と関数の引数と戻り値に付与する基本的な書き方について
Python型ヒントについて、変数と関数の引数と戻り値に付与…
Flaskでabortを用いてHTTPException例外を強制的に発生させる
Flaskでabortを用いてHTTPException例外…
Pythonエンジニアが選ぶPython入門者、初心者向けの本おすすめ10選
Pythonエンジニアが選ぶPython入門者、初心者向けの…
Flaskでデバッグをしてエラー解析する方法(debugパラメータ設定、VScodeでのデバッグ等)
Flaskでデバッグをしてエラー解析する方法(debugパラ…
WindowsでPython、Anaconda、VSCodeのインストールとPython開発環境を構築する方法
WindowsでPython、Anaconda、VSCode…

Primary Sidebar

人気記事

  • 1
    PyCharm,IntelliJのおすすめプラグイン一覧
  • no image 2
    Python未経験だが、フリーランスの案件に採用さ…
  • 3
    ITエンジニアとしてスキルを高めるためのUdemy講…
  • 4
    アメリカのシリコンバレーでプログラミングを無…

特集記事

  • 1
    Cursorの使用のポイントとコツ(コード補完、イ…
  • 2
    ITエンジニアとしてスキルを高めるためのUdemy講…

目次

1 csvファイルの読込み(csv.reader)
2 csvファイルの読込み(csv.DictReader)
3 CSVファイルへの書き込み(csv.writer)
4 csvファイルへのヘッダーを指定して書き込み(csv.DictWriter)
5 まとめ
6 関連記事
StartCode ロゴ
AI時代のエンジニアを最速で育てる
法人向けIT研修で即戦力を育成しています。詳しくはお問い合わせください。
▶ 詳細はこちら
Python講座
【Udemy】Python入門講座(0からPythonの基礎を体系的に学んで、生成AIでバイブコーディング)
受講生3000人ほどの人気講座。<strong>Pythonの基礎から生成AI活用</strong>...
詳細 ▶

Footer

利用規約