Hola, ¿cómo están?
Créame que lo intente de muchas maneras y no encuentro enmendar el error. -
Tengo un archivo de texto que contiene lo siguiente:
1 123
2 345
3 567
4 789
Tengo que establecer el próximo código que sí o si tiene que ser 5, no puedo contar las líneas porque
el programa tiene la posibilidad de borrar una línea:
1 123
2 345
4 789
Si cuento las lineas el código seria 3+1=4 y el 4 estaría repetido cosa que no puede ocurrir porque lo
utilizo para la búsqueda. -
Lo que ocurre es que si tengo más de una línea el programa funciona correctamente, pero si tengo un
Solo registro me da error, tmp aparece vacío. -
Esta es la función:
def establecer_codigo():
archivo = abrir_lectura()
tmp = archivo.readlines()[-1]
tmp = tmp.split()
codigo = int(tmp[0])
archivo.close()
return codigo
Saludos.
Daniel
No entiendo lo que quieres hacer, pero lo ideal sería leer lineas de atrás hacia adelante
for linea in archivo.readlines()archivo.readlines()[-::1]: # lee El Array desde el final
tmp = linea.strip()
if not temp: # si la línea quedó en blanco
continue # ir al siguiente valor del for
#aqui tienesla Ultima línea no en blanco
Hola, Angel lex, gracias por ocuparte.
Como te puedo explicar para que lo entiendas, lo voy a intentar:
Tengo que generar un código nuevo cada vez que se intenta ingresar un nuevo registro, el caso es que si el archivo tiene un solo registro me da error y si tiene 2 o más todo bien. -
El error:
Citarraceback (most recent call last):
File "basesDatos.py", line 138, in <module>
menu_uno()
File "basesDatos.py", line 29, in menu_uno
agregar()
File "basesDatos.py", line 65, in agregar
codigo = establecer_codigo()
File "basesDatos.py", line 108, in establecer_codigo
codigo = int(tmp[0])
IndexError: list index out of range
Por ello aclaraba que si hay un solo registro tmp aparece vacío. -
con el mismo codigo que te di, solo less el ultimo numero y agregas 1, no importa que se borran numeros intermedios, siempre tendrás el ultimo posible (tipo mysql autoincrement pero más rustico)
Perdón por la ignorancia pero me da un error de sintaxis, me podrías decir en que estoy pifiando. -
def establecer_codigo():
archivo = abrir_lectura()
for linea in archivo.readlines()archivo.readlines()[-::1]: # lee El Array desde el final
tmp = linea.strip()
if not tmp: # si la línea quedó en blanco
continue # ir al siguiente valor del for
codigo = int(tmp[0])
archivo.close()
return codigo
exactamente que error te da?
:huh:
estoy desde el cel, no vi este error (que deberías haverlo visto al marcartelo el python XD)
for linea in archivo.readlines()archivo.readlines()[-::1]:
archivo.readlines() está 2 veces seguidas
for linea in archivo.readlines()[-::1]:
:huh:
no veo el error
para qué compilas? por qué no simplemente ejecutas?
:huh:
lo digo porque veo
Citarpython -m py_compile "basesDatos.py"
usualmente solo requieres python script_name.py
:huh:
tu problema es buscarlo estaticamente... si al final del archivo agregas o quitas los saltos de linea, fallará
Por favor, a algún moderador le pido que restablezca lo que borre, no vale la pena que por estos dos ¿? alguien se prive de lo que estaba escrito(tal vez le sirva a alguien), me basta con borrar mi cuenta.
Saludos.
Daniel
1)
Citardigo por si el archivo contara con 500.000 registros. -
es grotesco lo que queres hacer, en tu lugar comenzaría por lo menos a leer sobre base de datos.
2)
CitarArgentino, acomodalo voz ya no se ni donde poner el post...
no sé de donde sale esto pero ese voz está muy mal, "voz" es del sonido que se produce al hablar, "vos" es lo que usamos para referirnos al otro al que hablamos.Ej: vos escribís muy mal
Bueno pss de alguna forma abriste el archivo sin el 'open("archivo.txt", "r")' y eso ya te hace un experto en magia negra :v