salomonsky commited on
Commit
2adb419
verified
1 Parent(s): 6751d01

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -40
app.py CHANGED
@@ -23,14 +23,12 @@ def generar_telefono_por_estado(estado):
23
  'Queretaro': '442',
24
  'Coahuila': '871'
25
  }
26
- lada = ladas.get(estado, '55') # Default a 55 si no coincide
27
  return f"{lada}{random.randint(1000000, 9999999)}"
28
 
29
  def generar_datos(cantidad, columnas, progreso):
30
  estados = [
31
- 'Ciudad de Mexico', 'Jalisco', 'Nuevo Leon', 'Veracruz', 'Yucatan',
32
- 'Puebla', 'Chiapas', 'Tamaulipas', 'Queretaro', 'Coahuila'
33
- ]
34
  bancos = ['BBVA', 'Banorte', 'Santander', 'Citibanamex', 'HSBC']
35
  datos = []
36
 
@@ -65,24 +63,24 @@ def generar_datos(cantidad, columnas, progreso):
65
  progreso.progress(1.0)
66
  return pd.DataFrame(datos)
67
 
68
- def guardar_en_archivos_csv(df, registros_por_archivo, cantidad_archivos):
69
- archivos_generados = []
70
- for i in range(cantidad_archivos):
71
- archivo_nombre = f"datos_parte_{i + 1}.csv"
72
- df.to_csv(archivo_nombre, index=False)
73
- archivos_generados.append(archivo_nombre)
74
- return archivos_generados
75
-
76
  def comprimir_archivos(archivos, nombre_zip):
77
  with zipfile.ZipFile(nombre_zip, 'w') as zipf:
78
  for archivo in archivos:
79
  zipf.write(archivo, Path(archivo).name)
80
  return nombre_zip
81
 
 
 
 
 
 
 
 
 
 
82
  def main():
83
- st.title("Generador de CSV con Datos Aleatorios")
84
-
85
- # Checkbox para seleccionar columnas
86
  columnas = []
87
  if st.checkbox("Nombre", value=True):
88
  columnas.append("Nombre")
@@ -101,37 +99,31 @@ def main():
101
  if st.checkbox("Banco", value=True):
102
  columnas.append("Banco")
103
 
104
- # Slider para seleccionar la cantidad de archivos
105
- cantidad_archivos = st.slider("Selecciona la cantidad de archivos a generar:", min_value=1, max_value=25, value=5)
106
- cantidad_registros_por_archivo = 1_000_000
107
 
108
- if 'archivos_generados' not in st.session_state:
109
- st.session_state.archivos_generados = []
110
-
111
- # Bot贸n para generar los datos
112
- if st.button("Generar CSV"):
113
  try:
114
  progreso = st.progress(0)
115
- st.write(f"Generando {cantidad_archivos} archivos con {cantidad_registros_por_archivo} registros cada uno...")
116
- df = generar_datos(cantidad_registros_por_archivo, columnas, progreso)
117
- st.session_state.archivos_generados = guardar_en_archivos_csv(df, cantidad_registros_por_archivo, cantidad_archivos)
118
- st.success("Archivos CSV generados correctamente.")
119
- except Exception as e:
120
- st.error(f"Error durante la generaci贸n: {e}")
121
-
122
- # Bot贸n para descargar los datos generados como ZIP
123
- if st.session_state.archivos_generados:
124
- if st.button("Descargar CSV"):
125
- nombre_zip = "datos_generados.zip"
126
- comprimir_archivos(st.session_state.archivos_generados, nombre_zip)
127
- with open(nombre_zip, "rb") as file:
128
  st.download_button(
129
- "Descargar ZIP con datos",
130
  data=file,
131
- file_name=nombre_zip,
132
- mime="application/zip"
133
  )
 
 
 
134
 
135
- # Asegurarse de que Streamlit ejecute el main al inicio
136
  if __name__ == "__main__":
137
  main()
 
23
  'Queretaro': '442',
24
  'Coahuila': '871'
25
  }
26
+ lada = ladas.get(estado, '55')
27
  return f"{lada}{random.randint(1000000, 9999999)}"
28
 
29
  def generar_datos(cantidad, columnas, progreso):
30
  estados = [
31
+ 'Ciudad de Mexico', 'Jalisco', 'Nuevo Leon', 'Veracruz', 'Yucatan', 'Puebla', 'Chiapas', 'Tamaulipas', 'Queretaro', 'Coahuila']
 
 
32
  bancos = ['BBVA', 'Banorte', 'Santander', 'Citibanamex', 'HSBC']
33
  datos = []
34
 
 
63
  progreso.progress(1.0)
64
  return pd.DataFrame(datos)
65
 
 
 
 
 
 
 
 
 
66
  def comprimir_archivos(archivos, nombre_zip):
67
  with zipfile.ZipFile(nombre_zip, 'w') as zipf:
68
  for archivo in archivos:
69
  zipf.write(archivo, Path(archivo).name)
70
  return nombre_zip
71
 
72
+ def guardar_en_archivo(df, formato):
73
+ if formato == "CSV":
74
+ archivo_nombre = "datos_generados.csv"
75
+ df.to_csv(archivo_nombre, index=False)
76
+ elif formato == "XLS":
77
+ archivo_nombre = "datos_generados.xlsx"
78
+ df.to_excel(archivo_nombre, index=False, engine='openpyxl')
79
+ return archivo_nombre
80
+
81
  def main():
82
+ st.title("Generador de Datos")
83
+
 
84
  columnas = []
85
  if st.checkbox("Nombre", value=True):
86
  columnas.append("Nombre")
 
99
  if st.checkbox("Banco", value=True):
100
  columnas.append("Banco")
101
 
102
+ cantidad_registros = st.number_input("Cantidad de registros a generar:", min_value=1, max_value=1_000_000, value=10_000)
103
+ formato_descarga = st.radio("Selecciona el formato de descarga:", options=["CSV", "XLS"])
 
104
 
105
+ if st.button("Generar Datos"):
 
 
 
 
106
  try:
107
  progreso = st.progress(0)
108
+ st.write(f"Generando {cantidad_registros} registros...")
109
+ df = generar_datos(cantidad_registros, columnas, progreso)
110
+
111
+ # Mostrar previsualizaci贸n
112
+ st.subheader("Previsualizaci贸n de datos (primeros 100 registros):")
113
+ st.dataframe(df.head(100))
114
+
115
+ archivo_generado = guardar_en_archivo(df, formato_descarga)
116
+
117
+ with open(archivo_generado, "rb") as file:
 
 
 
118
  st.download_button(
119
+ f"Descargar {formato_descarga}",
120
  data=file,
121
+ file_name=archivo_generado,
122
+ mime="text/csv" if formato_descarga == "CSV" else "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
123
  )
124
+ st.success(f"Archivo {formato_descarga} generado y listo para descargar.")
125
+ except Exception as e:
126
+ st.error(f"Error durante la generaci贸n: {e}")
127
 
 
128
  if __name__ == "__main__":
129
  main()