【Python】CSVファイル操作の決定版!csvモジュールの基本を徹底解説
こんにちは。ゆうせいです。
エンジニアの仕事をしていると、Excelのような表形式のデータをプログラムで扱いたい場面が本当によく出てきます。顧客リスト、売上データ、アンケート結果…。これらの多くは「CSVファイル」という形式で保存されています。
「CSVファイルって、ただカンマで区切られたテキストでしょ?自分で一行ずつ読み込んで、カンマで分割すればいいや」なんて思っていませんか?実はそれ、思わぬ落とし穴にはまることがあるんです!
そこで登場するのが、Pythonの「csvモジュール」です。このモジュールは、CSVファイルを手間なく、そして安全に読み書きするための専用ツール。今日は、新人エンジニアのあなたがCSV操作の達人になるための第一歩を、一緒に踏み出しましょう!
CSVファイルとcsvモジュールの基本
まず、「CSV」が何の略か知っていますか?これは「Comma-Separated Values」の略で、その名の通り「カンマで区切られた値」という意味です。表の各セルにあるデータをカンマで区切り、一行を一つのデータレコードとして表現した、とてもシンプルなテキストファイルなんです。
このシンプルさがゆえに、多くのアプリケーションでデータの受け渡しに使われています。
そして、Pythonのcsvモジュールは、このCSVファイルを賢く扱うための専門家です。例えば、データの中にカンマが含まれている場合("山田, 太郎"さんのような名前とか)でも、それが区切り文字なのか、データの一部なのかを正しく見分けてくれます。すごいでしょう?
csvモジュールでファイルを「読み込む」
まずは、既存のCSVファイルを読み込む方法から見ていきましょう。ここに、簡単なユーザーリスト users.csv
があるとします。
id,name,email
1,Sato,sato@example.com
2,Suzuki,suzuki@example.com
3,Takahashi,takahashi@example.com
このファイルをPythonで読み込むコードはこうなります。
import csv
with open('users.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
# readerオブジェクトから一行ずつデータを取得してループ
for row in reader:
print(row)
これを実行すると、こんな結果が表示されます。
['id', 'name', 'email']
['1', 'Sato', 'sato@example.com']
['2', 'Suzuki', 'suzuki@example.com']
['3', 'Takahashi', 'takahashi@example.com']
csv.reader(f)
という部分がポイントです。これはファイルオブジェクト f
を、CSVのルールを理解してくれる「readerオブジェクト」に変換しています。この reader
は、一行をカンマで分割して、文字列のリストとして返してくれるんです。自分で分割処理を書くより、ずっと簡単で確実だと思いませんか?
一つ注意点!読み込んだデータは、たとえ数字であってもすべて「文字列」として扱われます。もしIDを使って計算したい場合は、int(row[0])
のように自分で数値に変換するのを忘れないでくださいね。
csvモジュールでファイルに「書き込む」
次に、プログラムで作成したデータを新しいCSVファイルに書き出してみましょう。
import csv
# 書き出したいデータ(リストのリスト)
user_data = [
['id', 'name', 'email'],
[1, 'Tanaka', 'tanaka@example.com'],
[2, 'Ito', 'ito@example.com']
]
with open('new_users.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
# 複数の行を一度に書き込む
writer.writerows(user_data)
print("new_users.csv を作成しました!")
今度は csv.writer(f)
を使って「writerオブジェクト」を作成します。そして writer.writerows()
メソッドを使えば、リストのリスト形式のデータを一気にCSVファイルへ書き込めます。一行だけ書きたい場合は writer.writerow()
を使います。
ここで、open()
の中にある newline=''
というおまじないが重要です。これがないと、書き出したCSVファイルの行と行の間に、不要な空行が入ってしまうことがあるのです。CSVファイルへ書き込むときは、必ずこのオプションを付ける、と覚えてしまいましょう!
ヘッダーを辞書として扱う、もっと便利な方法
CSVファイルの1行目は、各列が何を表すかを示す「ヘッダー」になっていることが多いですよね。
csv.DictReader
を使うと、このヘッダーをキーとした辞書(dict)の形式でデータを扱えるようになり、コードが格段に分かりやすくなります。
import csv
with open('users.csv', 'r', encoding='utf-8') as f:
# DictReaderを使う
reader = csv.DictReader(f)
for row in reader:
# 添字の数字ではなく、列名でアクセスできる!
print(f"ID: {row['id']}, Name: {row['name']}")
row[0]
や row[1]
のように数字でアクセスするよりも、row['id']
や row['name']
のように列の名前でアクセスできる方が、コードの意味が断然分かりやすいですよね。これはぜひ使ってほしいテクニックです!書き込み用の csv.DictWriter
もありますよ。
まとめと次のステップ
今回はPythonのcsvモジュールの基本的な使い方を解説しました。
csv.reader
: CSVファイルを読み込み、一行をリストとして取得する。csv.writer
: リスト形式のデータをCSVファイルに書き込む。csv.DictReader
: ヘッダー行をキーにした辞書としてデータを読み込む。
この基本をマスターすれば、日常業務で発生する多くのデータ処理タスクを自動化できるようになるはずです。
そして、もしあなたがCSVファイルを使った、より高度なデータ集計や分析、統計処理に挑戦したくなったら、そのときは「pandas」というライブラリの扉を叩いてみてください。pandasは、csvモジュールよりもはるかにパワフルなデータ操作機能を提供してくれます。
まずはcsvモジュールで基本を固め、自信がついたら次のステップへ進む!この順番で学習を進めていくのがおすすめですよ。頑張ってください!
Python csvモジュールの主な機能まとめ
クラス/関数 | 主な役割 |
csv.reader(ファイル) | CSVファイルを読み込むための「リーダー」を作成します。一行を文字列のリストとして扱います。 |
csv.writer(ファイル) | CSVファイルへ書き込むための「ライター」を作成します。 |
(ライター).writerow(リスト) | ライターを使って、1行分のデータ(リスト形式)をファイルに書き込みます。 |
(ライター).writerows(リストのリスト) | ライターを使って、複数行のデータ(リストのリスト形式)をまとめてファイルに書き込みます。 |
csv.DictReader(ファイル) | 1行目のヘッダーをキーとした辞書の形で、一行ずつデータを読み込むリーダーを作成します。 |
csv.DictWriter(ファイル, fieldnames) | 辞書形式のデータをCSVファイルへ書き込むためのライターを作成します。 |
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。