Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python CSVモジュール入門:CSVファイルの読み書きをステップバイステップで解説

Pythonのcsvモジュールは、CSVファイルを扱うための標準ライブラリです。CSVファイルには大量の情報を格納でき、csvモジュールのreader()関数とwriter()関数を使えば、PythonからCSVファイルを簡単に読み書きできます。


データの読み取り、書き込み、操作はプログラミングに欠かせない要素です。外部ソースからデータを読み込んだり書き出したりできるようになれば、Pythonでのファイル処理の幅が大きく広がります。

例えば、あなたが地元のアイスクリーム店のオーナーで、顧客の購買傾向をもっと詳しく知りたいとしましょう。Pythonを使えば、収集した注文データを分析して、どのフレーバーが人気なのか、それぞれのフレーバーにいくら支出されているのかなどを把握できます。

ここで活躍するのがPythonのcsvモジュールです。CSVファイルは大量のデータを保存するために広く使われており、csvモジュールを使えばそれらのファイルをPythonで解析できます。このチュートリアルでは、csvモジュールを使ってCSVファイルを読み書きする方法を解説します。

CSVのおさらい

データを扱う際、カンマで区切られたリスト形式のデータを目にすることがあります。例えば、アイスクリームの注文リストの各値がカンマで区切られているようなケースです。このデータ構造は「CSV(Comma-Separated Values:カンマ区切り値)」と呼ばれます。

従来のテキストファイルもデータ保存には便利ですが、構造化されたデータを保存することはできません。一方、CSVファイルなら、表形式で構造化データを保存でき、コード内で参照できます。これはスプレッドシートやデータベースと似た使い方です。例えば、アイスクリームのフレーバーや仕入れ先の情報をCSVファイルに保存しておくことができます。

以下はCSVファイルの一例です。

suppliers.csv

Hendersons Creamery, 123 Main Street, Cream
Peterson Chocolate, 129 Second Street, Chocolate Sprinkles

このファイルには「仕入れ先の名前」「住所」「供給される商品」という3つの項目が保存されており、Hendersons CreameryとPeterson Chocolateの2社分のデータが含まれています。

データがCSVファイルとして構造化されているため、Pythonプログラムで解析し、個々の列や行から必要なデータを取得できます。

Pythonのcsvモジュールとは

Pythonのcsvモジュールを使うと、CSVデータを簡単に解析できます。例えば、仕入れ先情報のCSVファイルがあれば、csvモジュールでそのデータを取得して自由に処理できます。

csvモジュールはPythonに組み込まれていますが、使用前にプログラムへインポートする必要があります。次のコードでインポートできます。

import csv

CSVファイルの読み方

CSVファイルのデータを扱うには、まずファイルを読み込む必要があります。csvモジュールにはreader()メソッドが用意されており、これを使ってCSVファイルをプログラムに読み込めます。reader関数は、指定したファイルの各行を列のリストに変換します。

例えば、アイスクリームの仕入れ先リストがsuppliers.csvというファイルに保存されており、これをプログラムに読み込みたいとします。ファイルの中身は次の通りです。

Hendersons Creamery, 123 Main Street, Cream
Peterson Chocolate, 129 Second Street, Chocolate Sprinkles
HW Smith and Co, 17 Boston Avenue, Ice Cream Cones

このデータは次のコードで取得できます。

import csv
with open("suppliers.csv", "r") as f:
    contents = csv.reader(f)
    for c in contents:
        print(c)

コードの内容を分解してみましょう。1行目ではcsvモジュールをインポートし、コード内でCSV関連のメソッドを使えるようにしています。次の行ではwith文でファイルを開き、ファイルオブジェクトを変数fに代入しています。

続くcontents = csv.reader(f)で、csv.reader()関数を使ってファイルの内容を読み込みます。最後にforループでCSVファイルの各行を順番に処理し、Pythonシェルに出力します。

このプログラムを実行すると、次のような結果が得られます。

['Hendersons Creamery', ' 123 Main Street', ' Cream']
['Peterson Chocolate', ' 129 Second Street', ' Chocolate Sprinkles']
['HW Smith and Co', ' 17 Boston Avenue', ' Ice Cream Cones']

ご覧の通り、プログラムはファイルの内容を読み込み、各行を配列(リスト)に変換しました。このデータがあれば、プログラム内で自由に操作できます。

例えば、店舗閉鎖のため来週の注文をキャンセルする通知を仕入れ先に送るとしましょう。次のコードで各仕入れ先の住所を取得すれば、通知を送ることができます。

…

	for c in contents:
		print(c[1])

実行結果:

123 Main Street
129 Second Street
17 Boston Avenue

このコードでは、forループでcontents変数の各行を処理し、インデックス番号1の値を出力しています。この場合、インデックス1には各仕入れ先の住所が格納されています。

次に、ファイルから読み込んだデータを配列(リスト)に格納する方法を見てみましょう。後で使えるようデータを別の変数に保存できるため、実務でもよく使われるテクニックです。次のコードで実現できます。

import csv

suppliers = []

with open("suppliers.csv", "r") as f:
	contents = csv.reader(f)
	for c in contents:
		suppliers.append(c)

print(suppliers)

実行結果:

[['Hendersons Creamery', ' 123 Main Street', ' Cream'], ['Peterson Chocolate', ' 129 Second Street', ' Chocolate Sprinkles'], ['HW Smith and Co', ' 17 Boston Avenue', ' Ice Cream Cones']]

コードの流れを説明します。プログラムはsuppliers.csvファイルを開いて読み込み、冒頭で宣言したsuppliers配列に各レコードを追加(append)していきます。最後にsuppliers変数の内容を出力します。

CSVファイルへの書き込み

csvモジュールには、データをCSVファイルに書き込むためのwriter()メソッドも用意されています。writer()関数を使えば、指定したファイルにデータを書き込み、後で利用できるように保存できます。

writer()関数は、ファイルへの書き込みに使えるオブジェクトを作成します。そして実際にデータを書き込む際は、writerow()メソッドを使用します。

例えば、各仕入れ先レコードに新しい値を追加するプログラムを書いたとしましょう。この値は、その仕入れ先がある商品の主要サプライヤーかどうかを示すものです。持っているデータをファイルに書き出すには、次のようなコードを使います。

import csv

suppliers = []

with open("suppliers.csv", "r") as f:
	contents = csv.reader(f)
	for c in contents:
		c.append("Yes")
		suppliers.append(c)

with open("new_suppliers.csv", "w") as f:
	write_to_file = csv.writer(f)
	for s in suppliers:
		write_to_file.writerow(s)

コードの前半は先ほどの例とほぼ同じで、suppliers.csvを読み込んでsuppliers配列に内容を移しています。唯一の違いは、読み込み時に各項目にYesという新しい値を追加している点です。この値は、その仕入れ先が特定商品の主要サプライヤーであるかどうかを示します。

次に、new_suppliers.csvという新しいファイルを開き、suppliersの内容をそこに書き込みます。writer()関数でファイルへの書き込み準備を行います。

その後、forループでsuppliers配列を処理し、writerow()メソッドで各仕入れ先をnew_suppliers.csvファイルに1行ずつ追加していきます。

実行結果として生成されるファイルは次の通りです。

new_suppliers.csv

Hendersons Creamery, 123 Main Street, Cream,Yes
Peterson Chocolate, 129 Second Street, Chocolate Sprinkles,Yes
HW Smith and Co, 17 Boston Avenue, Ice Cream Cones,Yes

ただし、suppliers変数全体をファイルに書き込みたいだけなら、1件ずつループ処理する必要はありません。writerows()メソッドを使えば、suppliers変数の全項目を一度にnew_suppliers.csvファイルへ書き込めます。

その場合のコードは次の通りです。

…
	write_to_file = csv.writer(f)
	write_to_file.writerows(suppliers)

…

実行結果:

new_suppliers.csv

Hendersons Creamery, 123 Main Street, Cream,Yes
Peterson Chocolate, 129 Second Street, Chocolate Sprinkles,Yes
HW Smith and Co, 17 Boston Avenue, Ice Cream Cones,Yes

CSVファイルのクォート(引用符)設定

上記の例では、コードはsuppliers配列の内容をそのまま新しいファイルに書き込みました。

しかし、各値を引用符で囲んでファイルに書き込みたい場合もあります。例えば、仕入れ先名にカンマが含まれていると、CSVファイルの構造が崩れてしまうことがあります。

こうした問題を防ぐため、csvモジュールには4つのクォート(引用符)オプションが用意されています。これらはcsv.writer()メソッドの引数として渡します。

  • csv.QUOTE_ALL:すべての文字列を引用符で囲む
  • csv.QUOTE_NONNUMERIC:文字列フィールドをすべて引用符で囲む
  • csv.QUOTE_MINIMAL:特殊文字を含むフィールドのみ引用符で囲む
  • csv.QUOTE_NONE:値を一切引用符で囲まない

例えば、suppliers配列のすべての値を引用符で囲んでファイルに書き込みたい場合は、次のコードを使います。

…

write_to_file = csv.writer(f, quoting=csv.QUOTE_ALL)

…

この状態でプログラムを実行すると、new_suppliers.csvファイルは次のようになります。

"Hendersons Creamery"," 123 Main Street"," Cream","Yes"
"Peterson Chocolate"," 129 Second Street"," Chocolate Sprinkles","Yes"
"HW Smith and Co"," 17 Boston Avenue"," Ice Cream Cones","Yes"

まとめ

ファイルとのデータの読み書きができるようになると、Pythonプログラムで生成・取得したデータを保存し、後から活用できるようになります。例えば、アイスクリームのフレーバーと価格のメニューをPythonプログラムで扱いたい場合、そのデータをCSVファイルに保存しておくと非常に便利です。

このチュートリアルでは、Pythonのcsvモジュールの基本と仕組みを解説しました。また、reader()オブジェクトとwriter()オブジェクトを使ったファイルの読み書き方法についても触れました。

これであなたも、プロのようにPythonでCSVファイルのデータを読み書きできるようになりました!

  1. Pythonの継承を完全解説:親クラス・子クラスの基本からメソッドのオーバーライドまで

    Pythonの継承(inheritance)とは、あるクラス(子クラス)が別のクラス(親クラス)のコードを受け継いで利用できるようにする仕組みです。継承はPythonのようなオブジェクト指向言語において不可欠な機能であり、コードの重複を減らし、開発効率を大幅に向上させます。 Pythonはオブジェクト指向言語であり、再利用可能なコードブロックを作成することで、より効率的なプログラミングを実現できます。その中心的な手法のひとつが「継承」です。継承を使えば、あるサブクラスが別のクラスのコードを参照・利用できるようになります。 たとえば、「銀行口座」を管理するクラスがあり、そこから「子供用銀行口座

  2. Pythonインタープリターとは?仕組みと初心者向けオンライン環境を徹底解説

    Pythonは学びやすいプログラミング言語として知られています。その理由のひとつが、自分のマシンに正しいバージョンのPythonをインストールしなくても、オンラインで利用できるPythonインタープリターが数多く存在する点です。本記事では、Pythonインタープリターの仕組みについて解説し、初心者にも使いやすい人気のオンラインインタープリターをご紹介します。 Pythonプログラムはどのように実行されるのか? PythonはJavaと同様に、純粋なインタプリタ言語ともコンパイラ言語とも分類できず、両方の性質を併せ持っています。 ここでいう「コンパイル」とは、特定のプラットフォームに依存し