Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Modificar un registro(línea/renglón) en python.
#1
Hole, ¿cómo están? 
Yo parece seguido con mis dudas, en este caso les pediría 2 favores:
1): ¿Les parece que voy bien con el código...?
2): ¿Como debo hacer para grabar nuevamente lista en el archivo.?


Código:
def modificar(codigo):
    archivo = abrir_lectura()
    mod_rec = input('\n Ingrese nuevo recordatorio:')

    lista = archivo.readlines() 
    archivo.close()
    for linea in lista:
        tmp = linea.split()
        if tmp[0] == codigo:
            tmp[1] = mod_rec
            lista = ' '.join(tmp)

            break

# archivo.write(" ".join((str(codigo[0]) , mod_rec)))
Debo aclarar que el código existe en el archivo porque ya lo verifique en otra función.
Desde ya muchas gracias por el tiempo que le dediquen.
Saludos.
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.-
Responder
#2
si el fichero no es muy grande, puedes llevar todas las lineas/registros a memoria en una lista, modificar el elemento dentro de la lista y volver a grabar toda la lista, haciendo la operación inversa a la lectura.
si es muy grande tendras que utilizar el puntero fichero.seek(), ubicarte al principio de la linea y cambiarlo, pero puedes tener problemas con el desplazamiento del resto de lineas. En este caso es conveniente trabajar con lineas de tamaño fijo.

saludos.
Responder
#3
(29-03-2018, 02:09 PM)calvicius escribió: si el fichero no es muy grande, puedes llevar todas las lineas/registros a memoria en una lista, modificar el elemento dentro de la lista y volver a grabar toda la lista, haciendo la operación inversa a la lectura.
si es muy grande tendras que utilizar el puntero fichero.seek(), ubicarte al principio de la linea y cambiarlo, pero puedes tener problemas con el desplazamiento del resto de lineas. En este caso es conveniente trabajar con lineas de tamaño fijo.

saludos.

Gracias, tomaré en cuenta lo que propones. -
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.-
Responder
#4
Hola Daniel. Si no necesitas todas las líneas al mismo tiempo es mejor que hagas la iteración directamente en el archivo en vez de llamar a readlines(), que carga todos los datos en memoria.

  1. for linea in archivo:
  2. # ...
  3. archivo.close()


Aunque tal vez, dependiendo lo que quieras hacer, te sea más útil emplear una base de datos SQLite.

Saludos!
Responder
#5
Hola, Francisco, más abajo dejo la función que hice y me funciona. -

Cita:Aunque tal vez, dependiendo lo que quieras hacer, te sea más útil emplear una base de datos SQLite.
En cuanto a esto, te explico lo que me pasa, tengo en mente desde mucho pero muchos años que quiero hacer mis propias bases de datos, seguramente como en muchos foros donde expuse esto lo tomaron como una utopía pero como soñar no cuesta nada sigo con mi proyecto, no tengo ninguna intención de competir con las grandes bases de datos, para nada es que desde que conocí las tablas en foxpro me atrajo la idea y cuando llego a estudiar los archivos me detengo y voy a fondo(le presto mucha mas atención que el resto de los temas). -


Código:
def modificar(codigo):
    archivo = abrir_lectura()
    arch_temp = open("temp.txt", "w")
    mod_rec = input('\n Ingrese nuevo recordatorio:')

    for linea in archivo:
        tmp = linea.split()
        if tmp[0] == codigo:
            tmp[1] = mod_rec
            arch_temp.write(" ".join(tmp) + '\n')
        else:
            arch_temp.write("".join(linea))

    archivo.close()
    arch_temp.close()
    os.remove("recordar.txt")
    os.rename("temp.txt", "recordar.txt")

Saludos.
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.-
Responder
#6
Perfecto Daniel!
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)