[Python-es] No veo el fallo :(

luis miguel morillas en posta.unizar.es
Jue Mayo 30 21:18:27 CEST 2002


	Asunto: [Python-es] No veo el fallo :(
	Fecha: jue, may 30, 2002 at 05:00:22 +0200


Citando a  Attila Saorin (mostroratas en yahoo.es):
> Buenas tardes,
> 
> sigo con mi codigo que busca en un fichero una linea si la encuentra la cambia y si no, la aniade,
> por claridad he preferido hacerlo de esta forma:
> 
> #!/usr/bin/env python
> 
> __name__ == "__main__"
> 
> import os
> import string
> 
> def edit (file, oldLine, newLine):
>     "Editing..."
>     source=open(file,'r')
>     temp=open('tmp.txt','w')
>     text=source.read()
>     if (string.find(text,oldLine)):
>         print 'la linea esta en el fichero'
>         temp.write(text.replace(oldLine,newLine))
>     else:
>         print 'la linea NO esta en el fichero'
>         temp.write(text)
>         temp.write(newLine)
>     source.close()
>     temp.close()
>     os.rename('tmp.txt',file)
> 
> este es el codigo y ejecuto la llamada a edit dos veces:
> 
> edit ('texto1.txt','si esta, la cambio','LA HE CAMBIADO')
> edit ('texto1.txt','esta no la vas a encontrar','HE ANADIDO UNA NUEVA LINEA')
> 
> y me devuelve:
> 
> 16:39:31 amd2 ~/python/pruebas > python edit.py
> la linea esta en el fichero
> la linea esta en el fichero
> 
> en las pruebas la primera frase esta en el fichero y deberia cambiarla y la segunda no lo esta,
> por lo que deberia aniadirla, el caso es que como podeis ver en la ejecucion, segun el, las dos
> frases estan en mi fichero de prueba y os aseguro que la segunda no lo esta, y no entiendo pq se
> va por esa rama del if. Eso si, al menos me cambia la linea para el primer caso.
> 
> Por cierto, que he buscado algun metodo para saber, antes de abrir el fichero original, ver que
> permisos q tiene para restaurarlos luego cuando lo haya modificado, pero solo he encontrado el
> chown y chmod y claro, no me sirven.
> 
> Gracias.
> 
> Attila
> 

El problema está en que find devuelve la posición en que se encuentra la subcadena 
buscadada. Si la cadena buscada no está, devuelve -1, que en tu caso hace que 
entre dentro del if. Es más, si la subcadena estuviera en la primera posición del fichero,
no entraría en el if. ¡Sorpresa!

Un saludo, 

Luis Miguel


Más información sobre la lista de distribución Python-es