【Python標準ライブラリ編 #5】csvでデータ処理!簡単な売上レポートジェネレーターを作ろう

ALL

こんにちは、Tech Samuraiです!
これまでの冒険で、私たちはファイルや時間を操る、Pythonの強力な標準ライブラリを探検してきました。

さて、仕事やデータ分析の現場で、最もよく出会うファイル形式の一つが**CSV (Comma-Separated Values)** です。表形式のデータをカンマで区切って保存した、シンプルで汎用性の高い形式ですね。しかし、「このCSVファイルの各行に、計算結果を新しい列として追加したいな…」と思ったとき、わざわざExcelやGoogleスプレッドシートを開くのは少し面倒ではありませんか?

今回のテーマは、そんな日常の「ちょっとしたデータ処理」を自動化するための、Pythonの標準ライブラリ**`csv`**です。このライブラリを使い、**簡単な売上データから、合計金額を計算して新しい列に追加する「売上レポートジェネレーター」**を開発します!


ステップ1:準備 – 元となるCSVファイル

まずは、処理の元となる売上データを用意します。以下の内容で`sales_data.csv`という名前のファイルを作成し、Pythonスクリプトと同じディレクトリに保存してください。

商品,単価,数量
リンゴ,120,15
バナナ,80,24
オレンジ,150,8
ぶどう,300,5

私たちの目標は、このファイルの各行に「単価 × 数量」の計算結果である「合計金額」という4列目を追加した、新しいCSVファイル(`report.csv`)を生成することです。


ステップ2:武器の紹介 – `csv.reader`と`csv.writer`

`csv`ライブラリの主役は、この2つのオブジェクトです。

  • csv.reader: CSVファイルを読み込むための道具。ファイルを開いてこれを適用すると、各行を**文字列のリスト**として、一行ずつ順番に取り出すことができます。
  • csv.writer: CSVファイルに書き込むための道具。これに**リスト形式のデータ**を渡すと、カンマで区切られた行として、ファイルに綺麗に書き込んでくれます。

ステップ3:実装 – レポート生成スクリプトの全コード

それでは、`csv`ライブラリを使って、レポートを生成するスクリプトを書いていきましょう。

import csv

input_filename = 'sales_data.csv'
output_filename = 'report.csv'

try:
    # 読み込み用と書き込み用のファイルを同時に開く
    with open(input_filename, 'r', encoding='utf-8') as infile, \
         open(output_filename, 'w', encoding='utf-8', newline='') as outfile:

        # 1. CSVリーダーとライターを準備
        reader = csv.reader(infile)
        writer = csv.writer(outfile)

        # 2. ヘッダー行を読み込み、新しいヘッダーを書き込む
        header = next(reader) # next()で最初の1行(ヘッダー)を読み飛ばす
        writer.writerow(header + ['合計金額'])

        # 3. データ行を一行ずつループ処理
        for row in reader:
            try:
                # 4. 文字列を数値に変換して計算
                # row[1]は単価、row[2]は数量
                price = int(row[1])
                quantity = int(row[2])
                total_price = price * quantity

                # 5. 元の行に計算結果を追加して書き込む
                writer.writerow(row + [total_price])
            except ValueError:
                print(f"警告: 数値に変換できない行をスキップしました: {row}")
            except IndexError:
                print(f"警告: 列が不足している行をスキップしました: {row}")


    print(f"レポートファイル '{output_filename}' が正常に作成されました。")

except FileNotFoundError:
    print(f"エラー: 入力ファイル '{input_filename}' が見つかりません。")

コードのポイント解説

  1. with open(...) as infile, open(...) as outfile:
    with文をカンマで繋げることで、複数のファイルを同時に、かつ安全に(処理が終わったら自動で閉じてくれる)開くことができます。
  2. next(reader)
    リーダーオブジェクトから最初の1行(ヘッダー)だけを読み込みます。これにより、ループ処理がデータ行から始まるようになります。
  3. writer.writerow(header + ['合計金額'])
    読み込んだヘッダーリストに、新しい列名`’合計金額’`を追加して、出力ファイルに書き込んでいます。
  4. price = int(row[1])
    CSVから読み込んだデータは**全て文字列**です。計算するためには、int()を使って数値(整数)に変換する(キャストする)必要があります。ここが非常に重要なポイントです。
  5. try-exceptブロック
    もしCSVファイルに空の行や、数値でないデータが含まれていた場合、int()の変換でエラーが発生します。try-exceptで囲むことで、プログラムがクラッシュするのを防ぎ、問題のある行をスキップして処理を続行できるようにしています。

ステップ4:実行結果の確認

このスクリプトを実行すると、同じフォルダに`report.csv`というファイルが生成されます。中身は以下のようになっているはずです。

商品,単価,数量,合計金額
リンゴ,120,15,1800
バナナ,80,24,1920
オレンジ,150,8,1200
ぶどう,300,5,1500

見事に、合計金額が計算された新しい列が追加されましたね!


まとめ

今回は、Pythonの標準ライブラリ`csv`を使い、日常的なデータ処理を自動化する方法を探検しました。

  • CSVファイルを一行ずつ読み込むcsv.reader
  • 新しいCSVファイルにデータを書き出すcsv.writer
  • 計算のために不可欠な、**文字列から数値への型変換**

Pandasのような高機能なライブラリを導入するまでもない、ちょっとしたCSVの加工なら、標準ライブラリだけで十分に、そして高速にこなせることがお分かりいただけたかと思います。

次回は、メールを自動送信!デイリーリマインダーを`smtplib`ライブラリを探検します。お楽しみに!

コメント

タイトルとURLをコピーしました