2012-02-03 16 views
5

Después de leer algunas publicaciones, parece que puede abrir un archivo para lectura y escritura con el modo 'r +' o 'w +'. Sin embargo, tratar de utilizar estos modos siempre me dan lugar a resultados extraños:python open ('archivo', 'r +') dando resultados extraños

  1. Si utilizo 'r +', llame file.read(), y luego llamar a file.write (STR), habrá un error de "IOError: [Errno 0] Error"
  2. Si uso 'r +', invoco file.write ('str') y llamo a file.read(), , volverá inesperado y muy largo contenidos (parece el interior de un objeto )
  3. Si utilizo 'w +', llamando file.read() devolverá una cadena vacía

Lo que trato de hacer es abrir un archivo, leer el contenido, modificarlo y volver a escribir. Actualmente lo abriré con 'r', cambiaré el contenido y lo abriré nuevamente con 'w' y escribiré de nuevo. ¿Es esta una buena forma de hacerlo?

Hay un ejemplo en http://snipt.org/zglJ0

estoy usando windows 7 y Python 2.7.2

+3

¿Podría compartir un fragmento de código que demuestre el problema? –

+0

Los tres experimentos anteriores están cerrados por file.close(). Sin embargo, parece que hacer tanto read() como write() en el mismo experimento (sin llamar a close() en el medio) conducirá a un resultado extraño. –

+0

¿Es esto tanto en Windows como en Linux? – tMC

Respuesta

5

Tienes que flush() cuando se cambia entre la lectura y la escritura de un archivo que se ha abierto en una actualización modo. O creo que también puedes seek(). Esto es causado por un comportamiento extraño en la implementación de archivos de Windows en Python 2.x; lo arreglaron en 3.x.

+0

Hola Kindall! Gracias por la respuesta, pero el método de descarga no parece funcionar (Sí, estoy usando Windows y Python 2.7.2). mi código como sigue: '>>> f = abrir (' f1.txt ~ ',' r + ') >>> f.read() ' blablabl ' >>> f.flush() >> > f.write ('AAA') Rastreo (llamada más reciente pasado): archivo "", línea 1, en f.write ('AAA') IOError: [Errno 0] Error >> > f.close() ' –

+1

Puede intentar 'f.seek (0, 1)' luego (buscar la posición actual en el archivo). – kindall

+0

¡Eso funciona! En este caso, parece más legible para cerrar y volver a abrir para cada acción diferente a continuación. –

Cuestiones relacionadas