【Python】行を指定してCSVファイルを読み込む方法

PythonでCSVファイルを操作する際、特定の行だけを読み込む方法が知りたいと思ったことはありませんか?

この記事では、PythonでCSVファイルを操作するための準備から、行を指定してCSVファイルを読み込む方法、さらに実践例まで詳しく解説していきます。

目次から探す

PythonでCSVファイルを操作するための準備

PythonでCSVファイルを操作するためには、まず必要なライブラリをインポートし、CSVファイルを読み込む必要があります。

この章では、それらの手順を説明します。

必要なライブラリのインポート

PythonでCSVファイルを操作するためには、csvという標準ライブラリを使用します。

このライブラリを使うことで、CSVファイルの読み込みや書き込みが簡単に行えます。

まずは、csvライブラリをインポートしましょう。


import csv

これで、csvライブラリを使ってCSVファイルを操作する準備が整いました。

CSVファイルの読み込み

次に、CSVファイルを読み込む方法を説明します。

CSVファイルを読み込むには、 open() 関数を使ってファイルを開き、 csv.reader() 関数を使ってCSVファイルを読み込みます。

以下は、sample.csvというCSVファイルを読み込むサンプルコードです。


import csv
# CSVファイルを開く
with open('sample.csv', 'r', encoding='utf-8') as csvfile:
    # CSVファイルを読み込む
    csv_reader = csv.reader(csvfile)
    # CSVファイルの内容を表示
    for row in csv_reader:
        print(row)

このコードでは、 open() 関数でsample.csvファイルを読み込みモード('r')で開いています。

encoding='utf-8'は、ファイルの文字コードがUTF-8であることを指定しています。

ファイルの文字コードが異なる場合は文字化けが発生します。encoding='utf-8'で文字化けが発生した場合はencoding='shift-jis'を試してみるといいでしょう。

with文を使うことで、ファイルの開閉を自動的に行ってくれるため、手動でファイルを閉じる必要がありません。

csv.reader() 関数は、CSVファイルを読み込むためのオブジェクトを作成します。

このオブジェクトを使って、CSVファイルの各行を読み込むことができます。

最後に、for文を使ってCSVファイルの各行を表示しています。

このようにして、CSVファイルを読み込むことができます。

行を指定してCSVファイルを読み込む方法

この章では、CSVファイルから特定の行を読み込む方法をいくつか紹介します。

指定行のみを読み込む方法

readlines()を使った方法

readlines() 関数は、ファイルの全ての行をリストとして返します。

このリストから指定した行を取り出すことができます。


with open("sample.csv", "r", encoding="utf-8") as f:
    lines = f.readlines()
    target_line = lines[2]  # 3行目を取得
    print(target_line)

enumerate()を使った方法

enumerate() 関数を使うと、ファイルの行番号と行の内容を同時に取得できます。

これを利用して、指定した行番号の行を読み込むことができます。


with open("sample.csv", "r", encoding="utf-8") as f:
    for i, line in enumerate(f):
        if i == 2:  # 3行目を取得
            print(line)
            break

複数の行を指定して読み込む方法

スライスを使った方法

readlines() 関数で取得したリストに対して、スライスを使って複数の行を指定して読み込むことができます。


with open("sample.csv", "r", encoding="utf-8") as f:
    lines = f.readlines()
    target_lines = lines[1:4]  # 2行目から4行目までを取得
    for line in target_lines:
        print(line)

リスト内包表記を使った方法

リスト内包表記を使って、指定した行番号の行を読み込むことができます。


with open("sample.csv", "r", encoding="utf-8") as f:
    lines = f.readlines()
    target_line_numbers = [1, 3, 5]  # 2行目、4行目、6行目を取得
    target_lines = [lines[i] for i in target_line_numbers]
    for line in target_lines:
        print(line)

条件に合致する行を読み込む方法

if文を使った方法

条件に合致する行を読み込むには、if文を使って条件を指定します。


with open("sample.csv", "r", encoding="utf-8") as f:
    for line in f:
        if "条件に合致する文字列" in line:
            print(line)

filter()関数を使った方法

filter() 関数を使って、条件に合致する行を読み込むことができます。


def is_target_line(line):
    return "条件に合致する文字列" in line
with open("sample.csv", "r", encoding="utf-8") as f:
    lines = f.readlines()
    target_lines = filter(is_target_line, lines)
    for line in target_lines:
        print(line)

これらの方法を組み合わせることで、様々な条件で行を指定してCSVファイルを読み込むことができます。

実践例

これまでに学んだ方法を使って、実際にCSVファイルから特定の行を抽出し、新しいCSVファイルに書き込む方法や、条件に合致するデータを集計する方法を解説します。

特定の行を抽出して新しいCSVファイルに書き込む

この例では、CSVファイルから特定の行を抽出し、新しいCSVファイルに書き込む方法を説明します。

以下のサンプルコードでは、input.csvファイルから2行目と4行目を抽出し、output.csvファイルに書き込んでいます。


import csv
# 入力ファイルを開く
with open('input.csv', 'r') as input_file:
    reader = csv.reader(input_file)
    # 出力ファイルを開く
    with open('output.csv', 'w') as output_file:
        writer = csv.writer(output_file)
        # 入力ファイルの行を読み込み、指定した行を出力ファイルに書き込む
        for i, row in enumerate(reader):
            if i in [1, 3]:  # 2行目と4行目を抽出(インデックスは0から始まるため、1と3を指定)
                writer.writerow(row)

条件に合致するデータを集計する

この例では、CSVファイルから条件に合致するデータを抽出し、その件数を集計する方法を説明します。

以下のサンプルコードでは、data.csvファイルから年齢が20歳以上のデータを抽出し、その件数を集計しています。


import csv
# 入力ファイルを開く
with open('data.csv', 'r') as input_file:
    reader = csv.reader(input_file)
    # 年齢が20歳以上のデータを抽出
    age_over_20 = [row for row in reader if int(row[1]) >= 20]  # row[1]が年齢の列であると仮定
    # 件数を集計
    count = len(age_over_20)
    # 結果を表示
    print(f'年齢が20歳以上のデータは{count}件です。')

このように、PythonでCSVファイルを操作する方法を使って、実際にデータを抽出したり集計したりすることができます。

これらの方法を組み合わせることで、さまざまなデータ処理が可能になります。

目次から探す