[Python-es] editar un fichero
Chema Cortés
chemacortes en wanadoo.es
Sab Jun 1 18:49:20 CEST 2002
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
El Vie 31 May 2002 17:56, Attila Saorin escribió:
> Bueno, ya me ha servido lo que me habeis dicho, solo queria saber una
> cosilla, he intentado buscar una forma de acortar mi programa, no usando un
> fichero temporal, habia pensado en algo como:
>
> def edit (fileChange, oldLine, newLine):
>
> source=file(fileChange,'r+')
> text=source.read()
> if (text.find(oldLine)>=0):
> print 'la linea esta en el fichero'
> source.write(text.replace(oldLine,newLine))
> else:
> print 'la linea NO esta en el fichero'
> source.write(newLine)
> source.close()
>
> Pero tiene un problema, si la linea esta en el fichero, me escribe de nuevo
> TODO el fichero con la linea que quiero cambiar cambiada, pero logicamente
> no quiero reescribir el fichero nuevo entero, por lo que queria saber por
> curiosidad habria alguna manera de hacerlo, de que solo me cambie esa linea
> en concreto. A mi me da que seria complicarlo un poco, borrando todo y
> reescribir, pero no se.
Entiendo (por lo que pone el código) que lo que te pasa es te vuelve a añadir
"todo" al final del fichero antiguo. Para evitar esto, acabada la lectura del
fichero debes hacer que vuelva al principio mediante un reset:
source.reset()
source.write(text.replace(oldLine, newLine))
Incluso podrías optimizar más (como sugiere veladamente Marcos) con algo tal
que así:
found = text.find(oldLine)
if found<0:
source.write(newLine)
else:
source.seek(found)
source.write(newLine)
source.write(found+len(oldLine):])
Estoy convencido que se puede hacer mejor, pero creo que la idea se ve cuál
es.
Saludos,
- --
Chema Cortes (chemacortes en wanadoo.es) | LinuxUser#142755 - SuSE Linux 8.0
ZARALINUX http://www.zaralinux.org | "La ignorancia se apodera de quien
PYTANDO http://pytando.sf.net | se contenta con lo que sabe"
PGPKEY: mailto:chemacortes en wanadoo.es?subject=__PGPKEY__
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org
iD8DBQE8+PsTHLTQrABk8H0RAgIfAKDi8OjWOH2qofvxzjoifZWM4PKrlACg7KHQ
2qnprDqNcDJUQq/pdtwM2zw=
=K3oC
-----END PGP SIGNATURE-----
Más información sobre la lista de distribución Python-es