Foros del Web » Programando para Internet » Python »

Eliminar una linea de un txt

Estas en el tema de Eliminar una linea de un txt en el foro de Python en Foros del Web. HOla, aca nuevamente luchando :( Bueno lo unico que hay un programa q graba en un log. Mi programa lo unico que hace es leer ...
  #1 (permalink)  
Antiguo 10/05/2010, 13:36
 
Fecha de Ingreso: junio-2009
Mensajes: 96
Antigüedad: 15 años, 4 meses
Puntos: 1
Eliminar una linea de un txt

HOla, aca nuevamente luchando :(

Bueno lo unico que hay un programa q graba en un log.
Mi programa lo unico que hace es leer una linea y ejecutar un storade.

Lo que necesito es q cada vez q lea.... elimine la linea que leyo del txt... ni idea cm hacerlo :(

archivo=open('D:\master Popper emblue/query/algo.log','r')
log("Conexion Estabecida a SQL SERVER")

msConn = odbc.odbc(mssqlDSN)
c = msConn.cursor()

for linea in archivo.readlines():
storade_procedure = linea.rstrip()
c.execute(str(storade_procedure))
#ACA DEBERIA DE BORRAR LA LINEA LEIDA, Claro que luego deberia subir el texto de abajo hacia arriba...

c.close()

O sea todas las lineas se ejcutaran, supongamos de la 1 a la 10. pro q pasa si hubo un problema de conexion en la linea 5??
Pues la idea de eliminar la linea es que la proxima vez que se ecjute ese archivo no vuelva a grabar las lineas 1 a 5....
Se que se podria hacer desde la base pero no puedo tocar desde alli....
*O sea cuando pongo subir el archivo de arriba hacaia abajo kiero decir q la linea 5 quede en la linea 1 por ejemplo


Gracas por la ayuda
msConn.close()

Última edición por sandovalchrist; 11/05/2010 a las 07:43
  #2 (permalink)  
Antiguo 11/05/2010, 07:43
 
Fecha de Ingreso: junio-2009
Mensajes: 96
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Eliminar una linea de un txt

Esube buscando en este foro y encontre en otro hilo esto....

1.
import re
2.
dirty_text = "Inicio ### start Este texto es tan vacio... ### end Fin"
3.
patter = re.compile('### start.*?### end', re.I | re.S)
4.
clean_text = patter.sub("", dirty_text)

Si bien la problematica es casi la misma que planteo un colaborador dice q es la mejor forma...
Alguien podria guiarme como quedaria?

-> http://www.forosdelweb.com/f130/elim...python-682131/

Grax!
  #3 (permalink)  
Antiguo 11/05/2010, 09:17
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Eliminar una linea de un txt

Hmm no podés borrar la línea mientras tengas el archivo abierto como solo lectura, y si lo abrieras como lectura-escritura deberías tener cuidado ya que deberías jugar con el puntero interno del archivo y lo que se escribe no es líneas sino bytes.

Ideas que me parecen mejores:
1.- usa una transacción, así si la ejecución falla se vuelve al estado anterior (en caso de que el problema sea hacer la misma operación más de una vez sobre la base)
2.- Guardar un indicador de la cantidad de líneas que lees. Esto es algo así:

Código Python:
Ver original
  1. i = 0
  2. for linea in archivo:
  3.    [ejecutar linea]
  4.    i += 1

[guardar i en alguna parte]

Ya en una ejecución siguiente, cargas el último valor de i, y modificas el for:
Código Python:
Ver original
  1. for linea in archivo:
  2.     if i > 0:
  3.         i -= 1
  4.     else:
  5.         [ejecutar linea]
Seguramente haya una forma mejor, pero esta se me ocurre primero. De todas formas me parece mejor evitar errores usando una transacción.

3.- guardar el 'resto' del archivo, con la línea leída, en un archivo nuevo, y usar éste último en la siguiente ejecución. Esto lo podés hacer facilmente, incluso podrías sobreescribir el archivo original.


Saludos.
  #4 (permalink)  
Antiguo 11/05/2010, 14:52
 
Fecha de Ingreso: junio-2009
Mensajes: 96
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Eliminar una linea de un txt

Grax alvaro lo tendre en cuenta... gracias x responder
  #5 (permalink)  
Antiguo 12/05/2010, 14:56
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Eliminar una linea de un txt

Cita:
Iniciado por sandovalchrist Ver Mensaje
Esube buscando en este foro y encontre en otro hilo esto....

1.
import re
2.
dirty_text = "Inicio ### start Este texto es tan vacio... ### end Fin"
3.
patter = re.compile('### start.*?### end', re.I | re.S)
4.
clean_text = patter.sub("", dirty_text)

Si bien la problematica es casi la misma que planteo un colaborador dice q es la mejor forma...
Alguien podria guiarme como quedaria?

-> http://www.forosdelweb.com/f130/elim...python-682131/

Grax!
No recuerdo haber dicho que fuera la mejor forma.

Pero bueno tienes varias alternativas para resolver tu problema, de momento se me ocurren 2:
1.- Leer todo el archivo, dividirlo en lineas, dejar en blanco el archivo, ir ejecutando las lineas. Si hubo algun problema poner las lineas faltantes en el archivo. (Este metodo no es inplace y hace que gastes mucha ram)

2.- El metodo de AlvaroG ir jugando con el puntero, para leer lineas y borrarlas. (Tener mucho cuidado aqui)

Etiquetas: eliminar, linea, txt
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:30.