CSVモジュールでCSV出力するとき、ヘッダーを付けてみます。
目次(リンク)
CSVファイルの先頭行にヘッダーを付けるには
CSVファイル出力のとき、1行目にヘッダーを入れたいと思います。
項目名の行ですね。
データの配列に項目名もまとめて入れてしまうやり方と、データの配列とは別にヘッダー行を入れるやり方を書いてみました。
配列にまとめて入れる
今回の例はコーヒーのメニューです。
まずは配列にヘッダー行もまとめて書いてみます
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import csv data_list = [] data_list.append(["Menu", "Price"]) data_list.append(["Caffe Americano", 400]) data_list.append(["Caffe Mocha", 550]) data_list.append(["Espresso", 510]) data_list.append(["Caffe Latte", 500]) data_list.append(["Soy Latte", 550]) with open("data/export_csvtest2.csv", "w", encoding="utf_8", newline="") as csv_file: csv.writer(csv_file).writerows(data_list) |
実行してみたところ、ヘッダー行を付けて出力できました。
with文でCSVファイルを開いているのは、with文を抜けたときにCSVファイルも自動的に閉じてくれるからです。
閉じ忘れがなくて、しかもソースコードをシンプルにできます。
Pythonの参考書でよく見かけるヤツですね。
newline=””で改行を制御していて、無駄な空行が入らないようにしています。
書き込むときに付ける
CSVファイルに書き込むとき、ヘッダー行を付ける場合です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import csv data_list = [] data_list.append(["Caffe Americano", 400]) data_list.append(["Caffe Mocha", 550]) data_list.append(["Espresso", 510]) data_list.append(["Caffe Latte", 500]) data_list.append(["Soy Latte", 550]) with open("data/export_csvtest.csv", "w", encoding="utf_8", newline="") as csv_file: csv.writer(csv_file).writerow(["Menu", "Price"]) csv.writer(csv_file).writerows(data_list) |
まずは実行してみます。
最初のやり方と同じく、ヘッダー行を付けて保存できました。
データ部だけの配列と、ヘッダーと分けて書き込むほうが、汎用性があるように思います。
好みによるのかもしれないですが。
Pandasを使って読み込んで保存しなおしてみる
表データを扱うライブラリのPandasで、読み込んで再度保存してみます。
1 2 3 4 5 |
import pandas as pd df = pd.read_csv("data/export_csvtest.csv") df.to_csv("data/export_csv_pandas.csv") |
header = Falseなどのオプションを付けていないので、ヘッダー行もインデックスも付くはずです。
実行してみると・・・。
1行目にMenu,Price が表示されました。
Pandasで配列のデータをCSV出力したら、ヘッダーは「1,2,3」のように数字で付いてしまいますが、今回はもともと付けていた項目名になりました。
ちゃんとヘッダーとして認識してくれたようですね。
PandasでCSV出力するときのヘッダーの扱いは、こちらの記事をどうぞ。
まとめ:CSV出力するときの、ヘッダーの付け方
writerowなどで書き込むとき、ヘッダー用の文字列が先頭にくるよう出力します。
Pandasは便利ですが、CSVモジュールもしっかり使えるようにしたいものです。