Streamlitを使用してファイルをダウンロードできる機能を実装することは、アプリケーションの利便性を高めるために役立ちます。
Streamlitでは、download_button
というウィジェットを使用して簡単にファイルをダウンロードできるボタンを作成できます。
テキストデータやCSV、Excel、画像ファイルなど、さまざまな種類のデータを提供するのに適しています。
実装する方法についてまとめます。
基本的な使い方
以下のコードは、テキストファイルをダウンロードするシンプルな例です。
import streamlit as st
# ダウンロードするテキストデータ
text_data = "Hello, Streamlit! This is your downloadable file."
# ダウンロードボタン
st.download_button(
label="Download Text File",
data=text_data,
file_name="example.txt",
mime="text/plain"
)
コードの説明
label
ボタンに表示するラベルを指定します。data
ダウンロードするデータを指定します。文字列、バイナリデータ、Pandasデータフレームなどが使用可能です。file_name
ダウンロードするファイルの名前を指定します。mime
ファイルのMIMEタイプを指定します。ここではtext/plain
を指定しています。
CSVファイルのダウンロード
次に、Pandasを使用して生成したCSVファイルをダウンロードする方法を紹介します。
import streamlit as st
import pandas as pd
# サンプルデータフレーム
data = {
"Name": ["Alice", "Bob", "Charlie"],
"Age": [25, 30, 35],
"City": ["New York", "San Francisco", "Chicago"]
}
df = pd.DataFrame(data)
# データフレームをCSV形式に変換
csv_data = df.to_csv(index=False)
# ダウンロードボタン
st.download_button(
label="Download CSV",
data=csv_data,
file_name="data.csv",
mime="text/csv"
)
コードの説明
df.to_csv(index=False)
でデータフレームをCSV形式の文字列に変換しています。mime="text/csv"
を指定することで、ブラウザがCSVファイルとして認識します。
バイナリファイルのダウンロード
画像やPDFなどのバイナリファイルもダウンロードできます。
以下は画像ファイルをダウンロードする例です。
import streamlit as st
# サンプル画像ファイルをバイナリモードで読み込む
with open("sample_image.png", "rb") as file:
img_data = file.read()
# ダウンロードボタン
st.download_button(
label="Download Image",
data=img_data,
file_name="sample_image.png",
mime="image/png"
)
コードの説明
open("sample_image.png", "rb")
で画像をバイナリモードで読み込みます。mime="image/png"
を指定することで、ファイルを画像として認識させます。
Excelファイルのダウンロード
Excelファイルをダウンロードする例を紹介します。
import streamlit as st
import pandas as pd
from io import BytesIO
# サンプルデータフレーム
data = {
"Product": ["A", "B", "C"],
"Sales": [100, 150, 200]
}
df = pd.DataFrame(data)
# Excelファイルを作成
output = BytesIO()
with pd.ExcelWriter(output, engine="xlsxwriter") as writer:
df.to_excel(writer, index=False, sheet_name="Sheet1")
output.seek(0)
excel_data = output.getvalue()
# ダウンロードボタン
st.download_button(
label="Download Excel",
data=excel_data,
file_name="data.xlsx",
mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
)
コードの説明
BytesIO
を使用してExcelファイルをメモリ上に作成します。mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
を指定することで、ファイルをExcelとして認識します。
まとめ
Streamlitのst.download_button
を使用すれば、さまざまな形式のファイルを簡単にダウンロードできるようになります。テキストデータからCSV、バイナリファイル、さらにはExcelファイルまで対応可能です。アプリケーションの用途に応じて、適切な形式でダウンロード機能を実装してみてください。