[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