ペンギンの開発日記

主にWeb開発

PythonでCSVを読み、ソートし、出力する

はじめに

Pythonで初めてCSVファイルを扱ったので、メモ。

すること

このようなCSVファイルがあったとします。

id,subject,score
01,国語,60
02,国語,100
03,国語,55
04,国語,90
05,国語,65
06,国語,80

これを読み込み、得点が高い順に並び変えます。
そして以下のように出力したいと思います。

id,subject,score
02,国語,100
04,国語,90
06,国語,80
05,国語,65
01,国語,60
03,国語,55

実装

import csv
import sys

# CSV内のデータをリストlに読み込み
filename = 'test.csv'
with open(filename, encoding='utf8', newline='') as f:
    reader = csv.reader(f)
    l = [row for row in reader]

    # リストlの1行目から最終行までを対象とし(スライス)、得点順にソートした新たなリストsortを生成
    sort = sorted(l[1:], reverse=True, key=lambda x:int(x[2]))

    # 出力 
    writer = csv.writer(sys.stdout)  # CSVファイルの内容を標準出力に出力
    writer.writerow(l[0])
    writer.writerows(sort)

おわりに

意外と機会がなくCSVちゃん、初めましての回でした。
仲良くなれたかも。

参考

docs.python.org

note.nkmk.me

note.nkmk.me