Spaces:
Runtime error
Runtime error
import streamlit as st | |
import pandas as pd | |
import os | |
import ast | |
## Init | |
# Página | |
if "pag" not in st.session_state: | |
st.session_state.pag = 0 | |
# Botón | |
if "buscar" not in st.session_state: | |
st.session_state.buscar = False | |
# Clicked | |
if "clicked" not in st.session_state: | |
st.session_state.clicked = False | |
## Funciones | |
# Función para cargar archivos | |
def load_file(file_path): | |
return pd.read_csv(file_path) | |
def callback(): | |
st.session_state.buscar = True | |
# Funciones para editar el session_state | |
## Aplicación | |
st.title("Buscador") | |
# Obtener lista de archivos en la carpeta de datos | |
cwd = os.getcwd() | |
st.write(cwd) | |
data_folder = os.path.join(cwd, 'web', 'pages', 'data') | |
files = os.listdir(data_folder) | |
files = [file for file in files if file.endswith(('csv', 'xlsx'))] | |
# Seleccionar archivo | |
st.header("Seleccione el archivo") | |
selected_file = st.selectbox("Archivos disponibles", files) | |
if selected_file: | |
# Carga de datos | |
file_path = os.path.join(data_folder, selected_file) | |
data = load_file(file_path) | |
# Buscador por índice o nombre de columna | |
search_option = st.radio("Buscar por", ('Índice', 'Nombre de columna')) | |
# Índice | |
if search_option == 'Índice': | |
index = st.number_input("Ingrese el índice", min_value=0, max_value=len(data)-1) | |
result = st.button("Buscar") | |
if result: | |
st.session_state.buscar = True | |
st.session_state.clicked = True | |
st.session_state.pag = 0 | |
if st.session_state.buscar or st.session_state.clicked: | |
if st.session_state.clicked: | |
st.session_state.pag = 0 | |
st.write(data.iloc[index]) | |
if 'Images_URL' in data.columns: | |
# Lista de imágenes | |
img_list = ast.literal_eval(data.loc[index, 'Images_URL']) | |
# Añadir flechas para navegar entre las imágenes | |
cols = st.columns(7) # 2 columnas para las flechas | |
# Flecha izquierda para retroceder | |
with cols[2]: | |
if st.button("←", on_click=callback()): | |
if st.session_state.pag > 0: | |
st.session_state.pag -= 1 | |
else: | |
st.session_state.pag = len(img_list) - 1 | |
# Flecha derecha para avanzar | |
with cols[5]: | |
if st.button("→", on_click=callback()): | |
if st.session_state.pag < len(img_list) - 1: | |
st.session_state.pag += 1 | |
else: | |
st.session_state.pag = 0 | |
# Mostrar la imagen actual | |
st.image(img_list[st.session_state.pag].strip(), caption="{} de {}".format(st.session_state.pag + 1, len(img_list))) | |
# Nombre de columna | |
else: | |
column = st.selectbox("Seleccione la columna", data.columns) | |
query = st.text_input(f"Ingrese el valor para buscar en la columna {column}") | |
if st.button("Buscar"): | |
st.write(data[data[column].astype(str).str.contains(query, case=False, na=False)]) | |
st.session_state.clicked = False | |