0Pricing
Python Academy · レッスン

csv.reader による CSV の読み取り

CSV ファイルを行単位で読み取り、インデックスで列にアクセスします。

「csv.reader による CSV の読み取り」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

概要

Pythonのcsvモジュールは、引用符付きフィールド、区切り文字、異なる改行コードなど、CSVファイルの複雑な処理を担います。

CSVファイルを開く

with open('data.csv', newline='') as f: が推奨される方法です。newline='' によって、改行コードをcsvモジュールに処理させます。
import csv, io
sample = 'name,age,city\nAlice,30,NYC\nBob,25,LA'
reader = csv.reader(io.StringIO(sample))
for row in reader:
    print(row)

csv.readerの基本

csv.reader(f)は行のイテレーターを返します。各行は文字列のリストです。
import csv, io
data = 'a,b,c\n1,2,3\n4,5,6'
for row in csv.reader(io.StringIO(data)):
    print(row)

ヘッダーをスキップする

next(reader)でヘッダー行をスキップできます。または、csv.DictReaderを使用すると列名でアクセスできます。
import csv, io
data = 'name,age\nAlice,30\nBob,25'
reader = csv.reader(io.StringIO(data))
header = next(reader)  # skip
for row in reader:
    print(row)

カスタム区切り文字

csv.reader(f, delimiter=';')は、セミコロン区切りのファイルを読み取ります。任意の1文字の区切り文字に対応します。
import csv, io
data = 'a;b;c\n1;2;3'
for row in csv.reader(io.StringIO(data), delimiter=';'):
    print(row)

引用符付きフィールドの処理

csv.readerは引用符付きフィールドを自動的に処理します。'Alice, Jr.'は1つのフィールドとして扱われます。
import csv, io
data = 'name,note\n"Smith, John","great guy"'
for row in csv.reader(io.StringIO(data)):
    print(row)

csv.DictReader

DictReaderは、ヘッダー行をキーとして各行をOrderedDict(3.8以降では通常のdict)に変換します。
import csv, io
data = 'name,age\nAlice,30\nBob,25'
for row in csv.DictReader(io.StringIO(data)):
    print(row['name'], row['age'])

型変換

CSVの値は常に文字列です。int(row['age'])やfloat(row['price'])のように明示的に変換します。
import csv, io
data = 'item,price\napple,1.5\nbanana,0.75'
for row in csv.DictReader(io.StringIO(data)):
    print(row['item'], float(row['price'])*2)

エンコーディングの処理

open(file, encoding='utf-8-sig')を使用すると、UTF-8 BOM(Excelで生成されたCSVに一般的です)を処理できます。
# with open('data.csv', encoding='utf-8-sig', newline='') as f:
#     reader = csv.DictReader(f)
print('encoding demo')

大きなCSVファイル

csv.readerは遅延評価されます。1行ずつ読み取るため、ファイル全体をメモリに読み込む必要はありません。
import csv, io
data = '\n'.join(f'{i},{i*2}' for i in range(1000))
reader = csv.reader(io.StringIO(data))
print(sum(int(row[0]) for row in reader))

方言の検出

csv.Sniffer().sniff(sample)は、区切り文字と引用形式を自動的に検出します。
import csv, io
data = 'a|b|c\n1|2|3'
sniff = csv.Sniffer().sniff(data[:100])
print('delimiter:', sniff.delimiter)
for row in csv.reader(io.StringIO(data), dialect=sniff):
    print(row)

クイックチェック

CSVファイルをopen()で開くとき、常に設定すべきパラメーターは何ですか?

まとめ

csv.readerは文字列のリストとして行を返します。DictReaderは行をdictとして返します。必ずnewline=''で開いてください。Excelファイルではエンコーディングを処理します。型は明示的に変換します。

次へ進む

この調子で頑張りましょう!次のレッスンに進んでください。

よくある質問

「csv.reader による CSV の読み取り」レッスンは無料ですか?

はい。「csv.reader による CSV の読み取り」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「csv.reader による CSV の読み取り」で何を学びますか?

CSV ファイルを行単位で読み取り、インデックスで列にアクセスします。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「csv.reader による CSV の読み取り」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. JSON のエンコードとデコード
  2. 入れ子になった JSON 構造の処理
  3. csv.reader による CSV の読み取り
  4. csv.DictWriter による CSV の書き込み
← Python Academyに戻る