¿Cómo abrir un archivo tanto para leer como para escribir?

¿Hay alguna forma de abrir un archivo tanto para leer como para escribir?

Como solución, abro el archivo para escribir, lo cierro y lo vuelvo a abrir para leer. Pero, ¿hay alguna manera de abrir un archivo para tanto la lectura como la escritura?

Así es como se lee un archivo y luego se escribe en él (sobrescribiendo los datos existentes), sin necesidad de cerrarlo y volver a abrirlo:

with open(filename, "r+") as f:
    data = f.read()
    f.seek(0)
    f.write(output)
    f.truncate()
Comentarios (12)

r+ es el modo canónico para leer y escribir al mismo tiempo. Esto no es diferente de usar la llamada al sistema fopen() ya que file() / open() es sólo una pequeña envoltura alrededor de esta llamada al sistema operativo.

Comentarios (0)

He probado algo así y funciona como se esperaba:

f = open("c:\\log.log", 'r+b')
f.write("\x5F\x9D\x3E")
f.read(100)
f.close()

Donde:

f.read(size) - Para leer el contenido de un archivo, llama a f.read(size), que lee cierta cantidad de datos y los devuelve como una cadena.

Y:

f.write(string) escribe el contenido de la cadena en el archivo, devolviendo Ninguno.

También si abres tutorial de Python sobre lectura y escritura de archivos encontrarás que:

'r+' abre el fichero tanto para leer como para escribir.

En Windows, 'b' anexado al modo abre el archivo en modo binario, por lo que También hay modos como 'rb', 'wb', y 'r+b'.

Comentarios (2)