2011-07-11 33 views
119

¿Hay alguna forma de abrir un archivo para leer y escribir? Pensé que "r +" era por eso.
Como estoy trabajando en archivos binarios, probé el modo "r + b", pero me sale un error que indica que el archivo no está abierto para leer.¿archivo abierto para leer y escribir?

+3

el problema que está resolviendo? tal vez haya una solución mejor que escribir/leer un archivo, p. 'mmap' –

+1

¿Podría darnos su código para que podamos contestarle? También puede intentar echar un vistazo: http://docs.python.org/tutorial/inputoutput.html#reading-and-writing-files. Sin embargo, he intentado usar r + b y funciona. ¿También hay algún beneficio para usar un descriptor de archivo en las funciones de diff? –

Respuesta

30

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 solo una pequeña envoltura alrededor de esta llamada al sistema operativo.

16

he intentado algo como esto y funciona como se esperaba:

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

Dónde:

f.read (tamaño) - leer el contenido de un archivo, llamado f.read (tamaño), que lee cierta cantidad de datos y la devuelve como una cadena.

Y:

f.write (cadena) escribe el contenido de cadena al archivo, volviendo Ninguno.

también si abre Python tutorial about reading and writing files se encuentra que:

'r +' abre el archivo para la lectura y la escritura.

En Windows, 'b' agregado al modo abre el archivo en modo binario, así que también hay modos como 'rb', 'wb' y 'r + b'.

+4

También leer y escribir funciona igualmente bien con el modo 'r + b', pero tiene que usar f.seek (0) entre f.read() y f.write() para colocar el cursor de nuevo al comienzo del archivo . – gaborous

+0

Tenga en cuenta que si los datos que está escribiendo no son más largos que los datos que ya están allí, no se truncarán. Use el método 'truncado' para detener esto. – Flimm

176

Así es como se lee un archivo y escribir en él (sobrescribir los datos existentes), sin cerrar y volver a abrir:

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

use 'a +' para cubrir el caso final de que el archivo no existe (se creará) –

+9

seek() y truncate() son críticos! – smwikipedia

+1

Tenga en cuenta que esto no funciona para agregar texto. – multigoodverse