Pythonでクォートやデリミタを指定してCSVファイルを読み書きする方法

この記事では、Pythonを用いてクォートやデリミタを指定してCSVファイルを読み書きする方法について詳しく解説します。具体的なコード例、その詳細な解説、および応用例を含めています。

目次

はじめに

CSV(Comma Separated Values)ファイルは、データを簡潔に保存・交換するための広く用いられるフォーマットです。Pythonでは`csv`モジュールを使用して、簡単にCSVファイルを操作することが可能です。しかし、実際のビジネスシーンでは標準のカンマ区切り以外のデリミタや特定のクォート文字を使用する場合も多くあります。このような場合にどのように対応するかを学びましょう。

基本的なCSVの読み書き

基本的なCSVファイルの書き出し

import csv

# CSVファイルを開く
with open('example.csv', 'w', newline='') as csvfile:
    csvwriter = csv.writer(csvfile)

    # ヘッダーを書き込む
    csvwriter.writerow(['Name', 'Age', 'Gender'])

    # データを書き込む
    csvwriter.writerow(['Alice', 29, 'Female'])
    csvwriter.writerow(['Bob', 34, 'Male'])

このコードは、`example.csv`というファイルに`Name`, `Age`, `Gender`というヘッダーと2行のデータを書き込みます。

基本的なCSVファイルの読み込み

import csv

# CSVファイルを開く
with open('example.csv', 'r') as csvfile:
    csvreader = csv.reader(csvfile)

    # ヘッダーをスキップ
    next(csvreader)

    # データを読み込む
    for row in csvreader:
        print(row)

このコードは、`example.csv`からデータを読み込んで表示します。

クォートやデリミタの指定

デリミタの指定

デリミタ(区切り文字)を変更するには、`csv.writer`や`csv.reader`の`delimiter`パラメータに指定します。

import csv

# タブ区切りのCSVを書き出し
with open('example_tab.csv', 'w', newline='') as csvfile:
    csvwriter = csv.writer(csvfile, delimiter='\t')
    csvwriter.writerow(['Name', 'Age', 'Gender'])
    csvwriter.writerow(['Alice', 29, 'Female'])
    csvwriter.writerow(['Bob', 34, 'Male'])

クォートの指定

クォート文字を変更する場面も考えられます。その場合、`quotechar`パラメータで指定できます。

import csv

# シングルクォートで囲む
with open('example_quote.csv', 'w', newline='') as csvfile:
    csvwriter = csv.writer(csvfile, quotechar="'")
    csvwriter.writerow(['Name', 'Age', 'Gender'])
    csvwriter.writerow(["Alice's", 29, 'Female'])
    csvwriter.writerow(['Bob', 34, 'Male'])

応用例

応用例1: CSVファイルからのデータフィルタリング

特定の条件に一致するデータだけを新しいCSVファイルに保存するケースを考えます。

# 条件に一致するデータをフィルタリング
with open('example.csv', 'r') as read_file, open('filtered.csv', 'w', newline='') as write_file:
    csvreader = csv.reader(read_file)
    csvwriter = csv.writer(write_file)

    headers = next(csvreader)
    csvwriter.writerow(headers)

    for row in csvreader:
        if int(row[1]) > 30:  # Ageが30より大きいデータをフィルタ
            csvwriter.writerow(row)

応用例2: マルチクォート対応のCSV読み込み

異なるクォート文字が混在するCSVも読み込み可能です。

import re

# マルチクォート対応のCSV読み込み
with open('multi_quotes.csv', 'r

') as f:
    for line in f:
        row = re.split(',(?=(?:[^\\"\\']*[\\"\\\'][^\\"\\']*[\\"\\\'])*[^\\"\\\']*$)', line.strip())
        print(row)

応用例3: 既存のCSVに列を追加

既存のCSVファイルに新たな列を追加するケースも多々あります。

import csv

# 列を追加
with open('example.csv', 'r') as read_file, open('example_added.csv', 'w', newline='') as write_file:
    csvreader = csv.reader(read_file)
    csvwriter = csv.writer(write_file)

    headers = next(csvreader)
    headers.append('NewColumn')
    csvwriter.writerow(headers)

    for row in csvreader:
        row.append('NewData')
        csvwriter.writerow(row)

まとめ

Pythonでクォートやデリミタを指定してCSVファイルを読み書きする方法を解説しました。特にビジネスの現場では、これらの設定を柔軟に変更できるスキルが求められます。応用例を通じて、さまざまなケースでの応用方法も学びました。この知識を活かして、データ処理作業を効率化してください。

コメント

コメントする

目次