En la pitón incorporada abierta función, ¿cuál es la diferencia exacta entre los modos w
, a
, w+
, a+
, y r+
?
En particular, la documentación implica que todo esto permitirá escribir en el archivo, y dice que abre los archivos para "agregar", "escribir" y "actualizar" específicamente, pero no define lo que significan estos términos.
Respuestas:
Los modos de apertura son exactamente los mismos que para la función de biblioteca estándar C
fopen()
.La página de
fopen
manual de BSD los define de la siguiente manera:fuente
w
yw+
ambos pueden hacerloThe file is created if it does not exist
b
anexa al modo se abre el archivo en modo binario, por lo que también son modos comorb
,wb
, yr+b
. Python en Windows distingue entre archivos de texto y binarios; Los caracteres de fin de línea en los archivos de texto se alteran automáticamente ligeramente cuando se leen o escriben los datos.+
no hace algo consistente independientemente si lo esa
,w
or
? ¿O no veo el patrón? ¿Cuál es el patrón?Me di cuenta de que de vez en cuando necesito buscar nuevamente en Google, solo para construir una imagen mental de cuáles son las principales diferencias entre los modos. Entonces, pensé que un diagrama sería más rápido de leer la próxima vez. Tal vez alguien más lo encuentre útil también.
fuente
a
descripción es incorrecta . Las escrituras siempre se colocan al final.Subsequent writes to the file will always end up at the then current end of file, irrespective of any intervening fseek(3) or similar
que es algo más fuerte que solo decir que la posición inicial es el final.La misma información, solo en forma de tabla
donde los significados son: (solo para evitar cualquier interpretación errónea)
escribir: se permite escribir en el archivo
crear: el archivo se crea si aún no existe
trunctate: durante la apertura del archivo se vacía (se borra todo el contenido del archivo)
posición al inicio: después de abrir el archivo, la posición inicial se establece al inicio del archivo
Nota:
a
ya+
siempre agregue al final del archivo: ignora cualquierseek
movimiento.Por cierto. comportamiento interesante al menos en mi win7 / python2.7, para el nuevo archivo abierto en
a+
modo:write('aa'); seek(0, 0); read(1); write('b')
- el segundowrite
se ignorawrite('aa'); seek(0, 0); read(2); write('b')
- el segundowrite
subeIOError
fuente
open(file,'a'); close(); open(file,'r+')
para lograr esto.a
y lasa+
escrituras siempre sucederán al final del archivo, independientemente de si uno mueve manualmente el puntero usandoseek()
.Las opciones son las mismas que para la función fopen en la biblioteca estándar de C:
w
trunca el archivo, sobrescribiendo lo que ya estaba allía
se agrega al archivo y se agrega a lo que ya estaba allíw+
se abre para leer y escribir, truncando el archivo pero también permitiéndole leer lo que se ha escrito en el archivoa+
se abre para agregar y leer, lo que le permite a ambos agregar al archivo y también leer su contenidofuente
Creo que es importante tenerlo en cuenta para la ejecución multiplataforma, es decir, como un CYA. :)
Esto está directamente citó de Python Software Foundation 2.7.x .
fuente
Me di cuenta de esto tratando de descubrir por qué usarías el modo 'w +' versus 'w'. Al final, acabo de hacer algunas pruebas. No veo mucho propósito para el modo 'w +', ya que en ambos casos, el archivo se trunca para empezar. Sin embargo, con la 'w +', puede leer después de escribir buscando de nuevo. Si intentaste leer con 'w', generaría un error IOE. Leer sin usar el modo de búsqueda con 'w +' no va a producir nada, ya que el puntero del archivo aparecerá después de donde ha escrito.
fuente