ファイル

[Python] csvで列を指定して書き込みを行う方法を解説

PythonでCSVファイルに特定の列を書き込むには、csvモジュールを使用します。

まず、csv.DictWriterを利用して、列名を指定してデータを書き込むことができます。

このクラスは、辞書形式でデータを受け取り、指定された列に対応する値をCSVファイルに書き込みます。

また、fieldnamesパラメータを使用して、書き込みたい列名を指定することが可能です。

これにより、必要な列だけを選択して効率的にデータを管理できます。

CSVファイルの基本操作

CSVファイルとは

CSV(Comma-Separated Values)ファイルは、データをカンマで区切って保存するテキストファイルの一種です。

主に表形式のデータを扱うために使用され、Excelなどのスプレッドシートソフトウェアでも広く利用されています。

CSVファイルは、以下のような特徴があります。

特徴説明
テキスト形式人間が読みやすい形式でデータを保存
カンマ区切り各データがカンマで区切られている
プラットフォーム非依存ほとんどのプログラムで読み書き可能

PythonでのCSV操作の基本

Pythonでは、標準ライブラリのcsvモジュールを使用してCSVファイルを簡単に操作できます。

以下に、基本的な操作方法を示します。

csvモジュールのインポート

CSVファイルを操作するためには、まずcsvモジュールをインポートします。

import csv

基本的な読み込み方法

CSVファイルを読み込むには、csv.readerを使用します。

以下は、CSVファイルを読み込む基本的な例です。

import csv
with open('data.csv', mode='r', encoding='utf-8') as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)
['名前', '年齢', '職業']
['田中', '30', 'エンジニア']
['佐藤', '25', 'デザイナー']

基本的な書き込み方法

CSVファイルにデータを書き込むには、csv.writerを使用します。

以下は、CSVファイルにデータを書き込む基本的な例です。

import csv
data = [
    ['名前', '年齢', '職業'],
    ['田中', '30', 'エンジニア'],
    ['佐藤', '25', 'デザイナー']
]
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)

output.csvファイルに以下の内容が書き込まれます。

名前,年齢,職業
田中,30,エンジニア
佐藤,25,デザイナー

列を指定して書き込みを行う方法

列を指定して書き込む必要性

CSVファイルにデータを書き込む際、特定の列にのみデータを追加したい場合があります。

これにより、データの整合性を保ちながら、必要な情報だけを更新することができます。

特に、以下のようなケースで列を指定して書き込むことが重要です。

ケース説明
データの更新既存のデータに新しい情報を追加する場合
特定の列の管理特定の列だけを変更したい場合
データの整合性維持不要な列を変更せずにデータを管理する場合

csv.DictWriterを使った列指定の書き込み

Pythonのcsvモジュールには、DictWriterクラスがあり、辞書形式でデータを扱うことができます。

これにより、列名を指定してデータを書き込むことが可能です。

DictWriterの基本的な使い方

DictWriterを使用するには、まずフィールド名を指定してインスタンスを作成します。

次に、辞書形式でデータを渡して書き込みます。

import csv
fieldnames = ['名前', '年齢', '職業']
data = [
    {'名前': '田中', '年齢': '30', '職業': 'エンジニア'},
    {'名前': '佐藤', '年齢': '25', '職業': 'デザイナー'}
]
with open('output_dict.csv', mode='w', encoding='utf-8', newline='') as file:
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()  # ヘッダーの書き込み
    writer.writerows(data)  # データの書き込み

フィールド名の指定方法

DictWriterを使用する際は、fieldnames引数で列名をリスト形式で指定します。

このリストに基づいて、辞書のキーがCSVファイルの列に対応します。

実際の書き込み例

上記のコードを実行すると、output_dict.csvファイルに以下の内容が書き込まれます。

名前,年齢,職業
田中,30,エンジニア
佐藤,25,デザイナー

このように、DictWriterを使用することで、列を指定して簡単にデータを書き込むことができます。

必要に応じて、特定の列だけを更新することも可能です。

実践例

サンプルデータの準備

実践例として、以下のようなサンプルデータを用意します。

このデータは、従業員の情報を含むCSVファイルです。

ファイル名はemployees.csvとします。

名前,年齢,職業
田中,30,エンジニア
佐藤,25,デザイナー
鈴木,28,マーケティング

列を指定してデータを書き込む手順

ステップ1: CSVファイルの読み込み

まず、既存のCSVファイルからデータを読み込みます。

csv.readerを使用して、ファイルの内容を取得します。

import csv
# CSVファイルの読み込み
with open('employees.csv', mode='r', encoding='utf-8') as file:
    reader = csv.reader(file)
    header = next(reader)  # ヘッダーを取得
    data = [row for row in reader]  # データをリストに格納

ステップ2: 書き込み用のデータ準備

次に、書き込み用のデータを準備します。

ここでは、年齢を更新するために、特定の従業員の年齢を変更します。

# 年齢を更新するデータ
updated_data = []
for row in data:
    if row[0] == '田中':
        row[1] = '31'  # 田中の年齢を31に更新
    updated_data.append(row)

ステップ3: 列を指定して書き込み

最後に、更新したデータを新しいCSVファイルに書き込みます。

csv.DictWriterを使用して、列を指定して書き込みます。

fieldnames = header  # ヘッダーをフィールド名として使用
with open('updated_employees.csv', mode='w', encoding='utf-8', newline='') as file:
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()  # ヘッダーの書き込み
    for row in updated_data:
        writer.writerow({'名前': row[0], '年齢': row[1], '職業': row[2]})  # 辞書形式で書き込み

このコードを実行すると、updated_employees.csvファイルに以下の内容が書き込まれます。

名前,年齢,職業
田中,31,エンジニア
佐藤,25,デザイナー
鈴木,28,マーケティング

このように、特定の列を指定してデータを書き込むことができ、必要な情報だけを更新することが可能です。

応用例

複数のCSVファイルをマージして特定の列を書き込む

複数のCSVファイルからデータを読み込み、特定の列をマージして新しいCSVファイルに書き込むことができます。

以下の例では、employees1.csvemployees2.csvという2つのファイルからデータを取得し、名前と職業の列をマージします。

import csv
# ファイル名のリスト
files = ['employees1.csv', 'employees2.csv']
merged_data = []
# 各ファイルからデータを読み込む
for filename in files:
    with open(filename, mode='r', encoding='utf-8') as file:
        reader = csv.DictReader(file)
        for row in reader:
            merged_data.append({'名前': row['名前'], '職業': row['職業']})  # 名前と職業をマージ
# マージしたデータを新しいCSVファイルに書き込む
with open('merged_employees.csv', mode='w', encoding='utf-8', newline='') as file:
    fieldnames = ['名前', '職業']
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(merged_data)

このコードを実行すると、merged_employees.csvファイルにマージされたデータが書き込まれます。

条件に基づいて特定の列を書き込む

特定の条件に基づいてデータをフィルタリングし、必要な列だけを書き込むことも可能です。

以下の例では、年齢が30歳以上の従業員の情報を新しいCSVファイルに書き込みます。

import csv
# 元のCSVファイルを読み込む
with open('employees.csv', mode='r', encoding='utf-8') as file:
    reader = csv.DictReader(file)
    filtered_data = [row for row in reader if int(row['年齢']) >= 30]  # 年齢が30以上のデータをフィルタリング
# フィルタリングしたデータを新しいCSVファイルに書き込む
with open('filtered_employees.csv', mode='w', encoding='utf-8', newline='') as file:
    fieldnames = ['名前', '年齢', '職業']
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(filtered_data)

このコードを実行すると、filtered_employees.csvファイルには年齢が30歳以上の従業員の情報が書き込まれます。

列の順序を変更して書き込む

CSVファイルに書き込む際に、列の順序を変更することもできます。

以下の例では、元のCSVファイルからデータを読み込み、列の順序を「職業」「名前」「年齢」に変更して新しいCSVファイルに書き込みます。

import csv
# 元のCSVファイルを読み込む
with open('employees.csv', mode='r', encoding='utf-8') as file:
    reader = csv.DictReader(file)
    data = [row for row in reader]  # データをリストに格納
# 列の順序を変更して新しいCSVファイルに書き込む
with open('reordered_employees.csv', mode='w', encoding='utf-8', newline='') as file:
    fieldnames = ['職業', '名前', '年齢']  # 新しい列の順序
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()
    for row in data:
        writer.writerow({'職業': row['職業'], '名前': row['名前'], '年齢': row['年齢']})  # 新しい順序で書き込み

このコードを実行すると、reordered_employees.csvファイルには列の順序が変更されたデータが書き込まれます。

まとめ

この記事では、Pythonを使用してCSVファイルに列を指定して書き込む方法について詳しく解説しました。

具体的なサンプルコードを通じて、CSVファイルの基本操作から応用例までを学ぶことができました。

ぜひ、実際のプロジェクトでこれらの知識を活用し、データ管理を効率化してみてください。

関連記事

Back to top button