スポンサーリンク

【Streamlit】file_uploaderでアップしたデータをSession Stateに保持

記事内に広告が含まれています。

Streamlitでは、ボタンがクリックされるとページが再実行され、file_uploaderの状態がリセットされてしまうことがあります。

再実行時にも情報を保持する仕組みとして、session_stateが提供されています。

アップロードされたファイルをsession_stateに保存しておくことでリセットを回避できますが、file_uploaderから得られるファイルオブジェクトは、session_stateに保存することができません。エラーになってしまいます。

そのため、ファイルの内容を読み込み、session_stateに保存する方法を取る必要があります。以下にコード例を示します。

import streamlit as st


def save_uploaded_file(uploaded_file):
    # ファイルの内容を読み取り、バイト列として保存
    try:
        bytes_data = uploaded_file.getvalue()
        return bytes_data
    except:
        return None


# Session Stateの初期化
if 'uploaded_file' not in st.session_state:
    st.session_state['uploaded_file'] = None

# File Uploaderの作成
uploaded_file = st.file_uploader("ファイルをアップロードしてください", type=['csv', 'xlsx'])

# アップロードされたファイルの保存
if uploaded_file is not None:
    st.session_state['uploaded_file'] = save_uploaded_file(uploaded_file)

# 他のボタンの作成
if st.button('他の操作'):
    st.write("他の操作がクリックされました")

# アップロードされたファイルの状態を表示(デバッグ用)
if st.session_state['uploaded_file'] is not None:
    st.write("アップロードされたファイルが存在します")

テスト用の「他の操作」ボタンをクリックすると動作の確認ができます。

スポンサーリンク
スポンサーリンク
Python
著者SNS
タイトルとURLをコピーしました