Python で CSV を 1 行ずつ読む

Shikha Chaudhary 2023年1月30日
  1. CSV ファイルのファイル構造
  2. Python で csv.reader を使用して CSV ファイルを 1 行ずつ読み取る
  3. Python で DictReader オブジェクトを使用して CSV ファイルを 1 行ずつ読み取る
  4. まとめ
Python で CSV を 1 行ずつ読む

Python では、ファイルを読み取って列単位で出力するのが一般的です。ただし、ファイルを 1 行ずつ読み取ると、少し混乱する場合があります。

この記事では、Python で CSV ファイルを 1 行ずつ読み取る方法について説明します。Python csv モジュールを使用して、Python で CSV ファイルを処理します。

CSV ファイルを 1 行ずつ読む前に、まず CSV ファイルのファイル形式を見てみましょう。これにより、CSV ファイルをより適切に操作できるようになります。

CSV ファイルのファイル構造

CSVComma Separated Values の略です。これは、データをテーブルに格納する単純なファイル形式です。これらのテーブルは、スプレッドシートまたはデータベースの形式にすることができます。

メモ帳のようなシンプルなテキストエディタで CSV ファイルを作成することもできます。各 CSV ファイル行は、テーブルの 1つのレコードに対応します。

さらに、各レコードには 1つ以上のフィールドがあります。フィールドとレコードの断面は、セルと呼ばれます。これらのフィールドは、カンマ,)で区切られています。

このコンマを区切り文字と呼ぶこともあります。この形式は、フィールド区切り文字としてコンマを使用することからその名前を取得することに注意してください。CSV ファイルは、多くのプログラム、データベース、スプレッドシート、およびワードプロセッシングソフトウェアとの互換性があるため、広く使用されています。

上記のファイル構造を使用して CSV ファイルを作成しましょう。ファイルを作成した後、さまざまな関数を使用して CSV ファイルを 1 行ずつ読み取ります。

MicrosoftExcel のスプレッドシートを使用して CSV ファイルを作成できます。ただし、システムに Microsoft Excel がインストールされていない場合は、メモ帳またはその他のテキストエディタを使用して CSV ファイルを作成できます。

これを行うには、ファイル拡張子を .csv に変更できます。また、CSV ファイルの形式に従うことを忘れないでください。実行する必要のあるすべての手順は次のとおりです。

  • テキストエディタを開き、コンテンツを正しい CSV 形式で書き込みます。ヘッダーとレコードはコンマで区切られます。各レコードは新しい行で始まります。これを以下に示します。

    Roll Number,Name,Subject
    1,Harry Potter,Magical Creatures
    2,Ron Weasley,Divination
    3,Hermione Granger,Dark arts
    

このファイルを Demo.csv として保存します。CSV ファイルが正常に作成されます。

open() 関数を使用して、Python で CSV ファイルを開くことができます。ただし、この目的のためだけに作成された pythoncsv モジュールを使用することをお勧めします。csv モジュールを使用するには、最初にそれをインポートする必要があります。

import csv

デモ用に作成済みの Demo.csv ファイルを使用します。ファイルは次のようになります。

Roll Number,Name,Subject
1,Harry Potter,Magical Creatures
2,Ron Weasely,Divination
3,Hermione Granger,Dark arts

Python でこの CSV の内容を 1 行ずつ読み取るために、さらに 2つのクラスを提供する csv モジュールを使用します。これらのクラスは、csv.readercsv.DictReader です。

これらのクラスを 1つずつ見ていきましょう。

Python で csv.reader を使用して CSV ファイルを 1 行ずつ読み取る

csv モジュールの csv.reader クラスを使用すると、CSV ファイルの行を値のリストとして読み取って反復処理できます。以下の例を見てください。

from csv import reader

# open file
with open("Demo.csv", "r") as my_file:
    # pass the file object to reader()
    file_reader = reader(my_file)
    # do this for all the rows
    for i in file_reader:
        # print the rows
        print(i)

リーダーオブジェクトを使用して、Demo.csv ファイルの行を繰り返し処理します。リーダーオブジェクトはイテレータとして機能します。これにより、一度に 1 行だけがメモリに残ります。

出力:

['Roll Number', 'Name', 'Subject']
['1', 'Harry Potter', 'Magical Creatures']
['2', 'Ron Weasley', 'Divination']
['3', 'Hermione Granger', 'Dark arts']

ここで使用されている関数を見てみましょう。

Python の open() 関数は、ファイルを開くために使用されます。ファイルを開くと、ファイルオブジェクトを返します。

構文:

open(file_name, mode)

パラメータ mode は、ファイルを開くモードを指定します。読み取り追加書き込み、または作成のいずれかになります。

reader() 関数はファイルを読み取るために使用されます。反復可能なリーダーオブジェクトを返します。上記の例では、この反復可能なオブジェクトは file_reader であり、for ループの使用からクリアする必要があります。

上記の例では、ヘッダーも出力されます。ヘッダーなしで CSV ファイルを出力することもできます。次の例を見てください。

from csv import reader

# skip the first line(the header)
with open("Demo.csv", "r") as my_file:
    file_csv = reader(my_file)
    head = next(file_csv)

    # check if the file is empty or not
    if head is not None:
        # Iterate over each row
        for i in file_csv:
            # print the rows
            print(i)

出力:

['1', 'Harry Potter', 'Magical Creatures']
['2', 'Ron Weasley', 'Divination']
['3', 'Hermione Granger', 'Dark arts']

ここでは、ヘッダーは出力されません。このアプローチは、反復中に最初の行をスキップすることを除いて、前のアプローチと同様に機能します。next() 関数を使用してヘッダーをスキップしました。

Python の next() 関数は、イテレータに存在する次のアイテムを返します。その構文を以下に説明します。

構文:

next(iterable_object / iterable, default)

Iterable または iterable object は、反復する必要のある値のセットです。default は、iterable が最後に到達した場合に返されるオプションのパラメーターです。

Python で DictReader オブジェクトを使用して CSV ファイルを 1 行ずつ読み取る

csv.reader は、CSV ファイルをリストとして読み取って出力します。

ただし、DictReader オブジェクトは、CSV ファイルの行を辞書として繰り返し処理します。csv.reader が各行をリストとして返す方法、ObjectReader が各行を辞書として返す方法。

以下の例を見てください。

from csv import DictReader

# open the file
with open("Demo.csv", "r") as my_file:
    # passing file object to DictReader()
    csv_dict_reader = DictReader(my_file)

    # iterating over each row
    for i in csv_dict_reader:
        # print the values
        print(i)

出力:

{'Roll Number': '1', 'Name': 'Harry Potter', 'Subject': 'Magical Creatures'}
{'Roll Number': '2', 'Name': 'Ron Weasley', 'Subject': 'Divinition'}
{'Roll Number': '3', 'Name': 'Hermione Granger', 'Subject': 'Dark arts'}

DictReader 関数は、情報を返す方法を除いて、reader 関数に似ています。これは、値をディクショナリとしてマップして返します。フィールド名はディクショナリのキーとして機能し、値は特定の行のデータで構成されます。

まとめ

この記事では、CSV の基本について説明しました。また、Python で CSV を 1 行ずつ読み取る 2つの方法も確認しました。また、メモ帳などのテキストエディタを使用して独自に CSV ファイルを作成する方法も確認しました。

関連記事 - Python CSV

関連記事 - Python File