bottleでPandasのDataFrameをCSV形式でダウンロードする。

やったこと

前回(bottleでテンプレートを継承してみる。)からの続き。
CSVファイルをダウンロードするところでいろいろつまづいた(bottleでCSVファイルをダウンロードさせるときにつまづいたところ)が、なんとか解決できた。

1.データを集計してDataFrameの形にしたものを、CSV形式でダウンロードする。
つまづいたところ」に記載しているように、文字コードで苦しんだが、
一旦to_csv()でform.pyが存在しているディレクトリにCSVファイルをSHIFT-JISで書き出し、
書き出したCSVファイルをダウンロードするようにプログラムを組んだ。

2.入力フォームに「日付」を入力する欄を追加した。
<input type = “date” />を使うと非常に便利。ブラウザ上でカレンダーが表示される。

作成コード

ディレクトリ構成

 

form.pyに、to_csv()でDataFrameをCSVファイルで書き出すコードを追記。
HTTPResponseに書き出したCSVファイルをダウンロードするための情報を記載。

日付データをフォームの入力項目から取得し、データをエクスポートする関数に入れる。

(参考ページ)
Python + Bottle でファイルのダウンロードを実装
pandasでcsvファイルの書き出し・追記(to_csv)

form.htmlに、日付を入力する欄を追加。

(参考ページ)
input type=”date”を使った日付入力フォーム

実行結果

ブラウザで開くと、日付を入力する欄が追加されている。
日付のところは、プルダウンを開くとカレンダーが表示される。

ダウンロードしたファイルは、文字コードがSHIFT-JISで、文字化けもしていない。

つまづいたところ

header情報を記載するところで、DataFrameをto_csv()でCSV形式に書き出すようにしておくと、
to_csv(encoding = “SHIFT-JIS”)で文字コードを指定しても、ダウンロードしたファイルの文字コードがUTF-8(Python3系のデフォルト文字コード)
でダウンロードされる。その結果、ダウンロードしたファイルが文字化けしている(以下の画像)。
コードは以下。

 

参考記事

参考までに、PandasのDataFrameは、以下のようなwriter.writerowメソッドは使えない。

(参考ページ)
PythonでCSVの読み書き

ライブコーディングの配信動画

次回やること

日付の入力で、デフォルト値を今日の日付にする。

コメント

タイトルとURLをコピーしました