PythonのCSVファイル操作(csvモジュール)とは?
CSV(Comma Separated Values)ファイルは、カンマ区切りでデータを記録するシンプルなテキスト形式で、データ交換や保存によく使われています。Python
では、標準ライブラリのcsv
モジュールを使って、CSVファイルの読み書きを簡単に行うことができます。
この記事では、Python
でのCSVファイルの基本的な操作方法から、データの読み込み、書き込み、さらには応用的な使い方まで解説します。
CSVファイルとは?
CSVファイルは、データをカンマ(,
)で区切って表現する形式のファイルです。各行が1レコードを表し、列の値がカンマで区切られています。例えば、次のようなCSVファイルがあります。
名前,年齢,職業
田中,28,エンジニア
鈴木,35,デザイナー
佐藤,22,学生
このように、CSVファイルは多くのデータベースやスプレッドシートで利用され、簡単なデータ保存や転送に適しています。
PythonでのCSVファイル操作
Python
のcsv
モジュールは、CSVファイルを扱うための便利な関数を提供しています。代表的な操作には、次のようなものがあります。
- 読み込み:CSVファイルからデータを読み取る
- 書き込み:データをCSVファイルに書き込む
- 辞書形式での操作:CSVの各行を辞書として扱う 次に、各操作を具体的に見ていきましょう。
CSVファイルの読み込み
CSVファイルを読み込むには、csv.reader()
を使います。この関数は、CSVファイルを1行ずつリスト形式で読み込みます。
csv.reader()
を使ったCSVファイルの読み込み
import csv
# sample.csv ファイルを読み込む
with open('sample.csv', 'r', encoding='utf-8') as file:
reader = csv.reader(file)
# 行ごとにデータを読み込む
for row in reader:
print(row)
出力例
['名前', '年齢', '職業']
['田中', '28', 'エンジニア']
['鈴木', '35', 'デザイナー']
['佐藤', '22', '学生']
この例では、csv.reader()
を使ってファイルを読み込み、各行をリストとして出力しています。with
ステートメントを使うことで、ファイルの自動クローズが保証されます。
csv.DictReader()
で辞書形式での読み込み
csv.DictReader()
を使うと、CSVの各行を辞書形式で読み取ることができます。列のヘッダーをキーとして、各行のデータが値として扱われます。
import csv
# sample.csv ファイルを辞書形式で読み込む
with open('sample.csv', 'r', encoding='utf-8') as file:
reader = csv.DictReader(file)
# 各行を辞書として読み込む
for row in reader:
print(row)
出力例
{'名前': '田中', '年齢': '28', '職業': 'エンジニア'}
{'名前': '鈴木', '年齢': '35', '職業': 'デザイナー'}
{'名前': '佐藤', '年齢': '22', '職業': '学生'}
このように、列のヘッダーが辞書のキーとして扱われるため、より可読性が高くなります。
CSVファイルへの書き込み
次に、CSVファイルにデータを書き込む方法について見ていきます。csv.writer()
を使うと、リスト形式のデータをCSVファイルに書き込むことができます。
csv.writer()
を使ったCSVファイルの書き込み
import csv
# 書き込むデータ
data = [
['名前', '年齢', '職業'],
['田中', 28, 'エンジニア'],
['鈴木', 35, 'デザイナー'],
['佐藤', 22, '学生']
]
# output.csv に書き込み
with open('output.csv', 'w', encoding='utf-8', newline='') as file:
writer = csv.writer(file)
# 行ごとに書き込む
writer.writerows(data)
writer.writerows()
を使うと、複数の行を一度に書き込むことができます。newline=''
を指定することで、行間に不要な空行が入らないようにしています。
csv.DictWriter()
で辞書形式での書き込み
csv.DictWriter()
を使えば、辞書形式のデータをCSVに書き込むことができます。書き込み時に列の順序を指定する必要があります。
import csv
# 書き込むデータ
data = [
{'名前': '田中', '年齢': 28, '職業': 'エンジニア'},
{'名前': '鈴木', '年齢': 35, '職業': 'デザイナー'},
{'名前': '佐藤', '年齢': 22, '職業': '学生'}
]
# output.csv に辞書形式で書き込み
with open('output.csv', 'w', encoding='utf-8', newline='') as file:
fieldnames = ['名前', '年齢', '職業']
writer = csv.DictWriter(file, fieldnames=fieldnames)
# ヘッダーを書き込み
writer.writeheader()
# 行ごとに書き込み
writer.writerows(data)
この方法では、DictWriter
を使ってデータを辞書形式で書き込んでいます。writeheader()
を呼び出すことで、CSVファイルの最初の行にヘッダーを出力します。
CSV操作のオプション設定
csv
モジュールでは、カンマ以外の区切り文字や、引用符の扱いなどを柔軟に設定できます。
区切り文字の変更
デフォルトでは、CSVはカンマで区切られますが、区切り文字を変更することも可能です。例えば、タブ区切り(TSV)ファイルを扱う場合には、delimiter
を指定します。
import csv
# タブ区切りのデータを読み込む
with open('sample.tsv', 'r', encoding='utf-8') as file:
reader = csv.reader(file, delimiter='\t')
for row in reader:
print(row)
引用符の扱い
CSV
ファイル内で値にカンマや改行が含まれる場合、値を引用符("
)で囲む必要があります。csv
モジュールでは、この引用符の扱いも指定できます。
import csv
# 引用符で囲まれたデータを書き込む
with open('output.csv', 'w', encoding='utf-8', newline='') as file:
writer = csv.writer(file, quoting=csv.QUOTE_ALL)
writer.writerow(['名前', '年齢', '職業'])
writer.writerow(['田中', 28, 'エンジニア'])
writer.writerow(['鈴木', 35, 'デザイナー'])
この例では、quoting=csv.QUOTE_ALL
を指定することで、すべての値が引用符で囲まれて出力されます。
CSV操作の注意点
- ファイルのエンコーディング
CSVファイルを扱う際には、適切な文字エンコーディングを指定することが重要です。日本語を含むファイルでは、encoding='utf-8'
を指定することで、文字化けを防ぐことができます。 newline=''
の指定
Windows環境では、CSVファイルに書き込む際にnewline=''
を指定することで、行の間に不要な空行が挿入されるのを防げます。- エラーハンドリング
大規模なデータセットを扱う場合や、外部からのデータを処理する場合、フォーマットの不備やエラーに備えて例外処理を取り入れると安全です。
結論
Python
のcsv
モジュールを使うと、CSVファイルの読み書きが簡単に行えます。csv.reader()
やcsv.writer()
でシンプルにデータを扱えるだけでなく、DictReader
やDictWriter
を使えば辞書形式でデータを扱うことができ、複雑なデータ処理も容易になります。また、区切り文字や引用符のカスタマイズも柔軟にできるため、さまざまなフォーマットのデータを効率的に処理することが可能です。
日常的なデータ管理や、データベースやAPIとの連携など、さまざまな場面でCSVファイルを活用できるよう、ぜひcsv
モジュールの基本を理解して活用しましょう。