import streamlit as st import pandas as pd import io import traceback st.set_page_config(page_title="Upload Debug Tool", layout="wide") st.title("🔧 File Upload Debug Tool") st.markdown(""" This tool will help us diagnose the exact upload issue. """) # Initialize session state if 'debug_info' not in st.session_state: st.session_state.debug_info = [] def log_debug(message): st.session_state.debug_info.append(message) st.write(f"DEBUG: {message}") st.sidebar.header("Upload Test") # Simple file uploader uploaded_file = st.sidebar.file_uploader( "Test File Upload", type=["csv"], key="debug_uploader" ) if uploaded_file is not None: log_debug(f"File detected: {uploaded_file.name}") log_debug(f"File size: {uploaded_file.size} bytes") log_debug(f"File type: {uploaded_file.type}") try: # Test method 1: Direct read log_debug("Attempting Method 1: Direct pd.read_csv()") df1 = pd.read_csv(uploaded_file) log_debug(f"SUCCESS Method 1: {len(df1)} rows, {len(df1.columns)} columns") st.success("✅ Method 1 (Direct read) WORKED!") st.dataframe(df1.head()) except Exception as e: log_debug(f"FAILED Method 1: {str(e)}") st.error(f"❌ Method 1 failed: {str(e)}") try: # Test method 2: Reset and read as bytes log_debug("Attempting Method 2: Read as bytes") uploaded_file.seek(0) # Reset file pointer bytes_data = uploaded_file.getvalue() log_debug(f"Bytes data length: {len(bytes_data)}") df2 = pd.read_csv(io.BytesIO(bytes_data)) log_debug(f"SUCCESS Method 2: {len(df2)} rows, {len(df2.columns)} columns") st.success("✅ Method 2 (Bytes read) WORKED!") st.dataframe(df2.head()) except Exception as e2: log_debug(f"FAILED Method 2: {str(e2)}") st.error(f"❌ Method 2 failed: {str(e2)}") try: # Test method 3: Read as string log_debug("Attempting Method 3: Read as string") uploaded_file.seek(0) string_data = uploaded_file.getvalue().decode("utf-8") log_debug(f"String data length: {len(string_data)}") df3 = pd.read_csv(io.StringIO(string_data)) log_debug(f"SUCCESS Method 3: {len(df3)} rows, {len(df3.columns)} columns") st.success("✅ Method 3 (String read) WORKED!") st.dataframe(df3.head()) except Exception as e3: log_debug(f"FAILED Method 3: {str(e3)}") st.error(f"❌ Method 3 failed: {str(e3)}") st.error("❌ ALL METHODS FAILED!") # Show full traceback st.code(traceback.format_exc()) else: st.info("👆 Upload a CSV file to test different reading methods") # Show debug log if st.session_state.debug_info: st.markdown("### Debug Log") for i, msg in enumerate(st.session_state.debug_info): st.text(f"{i+1}. {msg}") # Clear debug log if st.button("Clear Debug Log"): st.session_state.debug_info = [] st.rerun()