Error al querer leer el último registro en archivo .txt [python]

Iniciado por DanielPy, 25 Marzo 2018, 23:42 PM

0 Miembros y 2 Visitantes están viendo este tema.

DanielPy

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:
Código (python) [Seleccionar]
def establecer_codigo():
    archivo = abrir_lectura()
    tmp = archivo.readlines()[-1]
    tmp = tmp.split()
    codigo = int(tmp[0])
    archivo.close()

    return codigo


Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

engel lex

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
   
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

DanielPy

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. -
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

engel lex

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)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

DanielPy

Perdón por la ignorancia pero me da un error de sintaxis, me podrías decir en que estoy pifiando. -

Código (python) [Seleccionar]
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
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

engel lex

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

DanielPy

#6
 :huh:
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

engel lex

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]:
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

DanielPy

#8
 :huh:
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

engel lex

no veo el error

para qué compilas? por qué no simplemente ejecutas?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.