2010-05-03 13 views
34

Necesito abrir un archivo para leer y escribir. Si el archivo no se encuentra, debe ser creado. También se debe tratar como un binario para Windows. ¿Puede decirme la secuencia de modo de archivo que necesito usar para esto?Modo de archivo para crear + leer + anexar + binario

Intenté 'r + ab' pero eso no crea los archivos si no se encuentran.

Gracias

Respuesta

56

El modo es ab+ el r está implícito y 'a'ppend y (' w'rite '+' 'r'ead) son redundantes. Dado que el CPython (es decir pitón regular) file se basa en la C Stdio FILE tipo, aquí están las líneas relevantes de la página man (3) fopen:

  • w + abierto para lectura y escritura. El archivo se crea si no existe , de lo contrario, se trunca. La secuencia se coloca en el comienzo del archivo .

  • a + Abrir para leer y anexar (escribir al final del archivo). El archivo se crea si no existe . La posición inicial del archivo para leer está al principio de el archivo, pero la salida es siempre adjuntada al final del archivo.

Con la "b" añadida para hacer que DOS sea feliz. Es probable que desee hacer algo como esto:

>>> f = open('junk', 'ab+') 
>>> f 
<open file 'junk', mode 'ab+' at 0xb77e6288> 
>>> f.write('hello\n') 
>>> f.seek(0, os.SEEK_SET) 
>>> f.readline() 
'hello\n' 
>>> f.write('there\n') 
>>> f.seek(0, os.SEEK_SET) 
>>> f.readline() 
'hello\n' 
>>> f.readline() 
'there\n' 
+2

Works. También gracias por señalar os.SEEK_SET en su ejemplo. Creo que intenté abrir el archivo con un + antes pero no pude leer nada. No se me pasó por la mente que la secuencia se colocó al final del archivo ... –

+1

Tenga en cuenta que * debe * * siempre * buscar entre una lectura y una escritura, o una escritura y una lectura. Olvidarse de hacerlo generalmente funcionará en la mayoría de los sistemas, pero no (por ejemplo) en Windows. –

8
open("filename", "a+b") 

deben trabajar. Abre un archivo binario en el modo agregar/actualizar.

Cuestiones relacionadas