2011-07-29 10 views
6

Acabo de tener una idea y pensé qué mejor lugar para preguntar, entonces aquí mismo. Por curiosidad, ¿alguien sabe si se abre un archivo de datos anexados, así:Apertura de un archivo para anexar

file_name = "abc" 
file_handle = open(file_name,"a") 

es esencialmente el mismo que abrir un archivo para escribir y buscar hasta el final:

file_name = "abc" 
file_handle = open(file_name,"w") 
file_handle.seek(0,2) # 0 for offset, 2 for end-of-file 

estoy Me pregunto si abrir un archivo para agregar es esencialmente hacer el segundo bloque, abrir para escribir seguido de una búsqueda hasta el final del archivo, detrás de las escenas.

+0

¿Cómo se puede discernir la diferencia? –

Respuesta

15

Después de jugar un poco en mi terminal, puedo decir cuáles son las diferencias en ubuntu linux 11.04 usando python 2.7.1.

Al abrir con 'w' se trunca (es decir, se borra el contenido del archivo) tan pronto como se abre. En otras palabras, solo abrir el archivo con open('file.txt', 'w') y salir deja un archivo vacío.

La apertura con 'a' deja el contenido del archivo intacto. Entonces abrir con open('file.txt', 'a') y salir deja el archivo sin cambios.

Esto también se aplica a las opciones de actualización para abrir. El comando open('file.txt', 'w+') dejará un archivo vacío, mientras que los comandos open('file.txt', 'r+') y open('file.txt', 'a+') dejarán archivos sin cambios.

La diferencia entre las opciones 'r +' y 'a +' es el comportamiento que otros han sugerido. La opción 'r +' le permite escribir en cualquier lugar del archivo, mientras que 'a +' fuerza todas las escrituras al final del archivo, independientemente de dónde establezca la posición actual del archivo.

Si desea verlo más, de acuerdo con el python documentation, la función abierta acepta modos similares a the fopen function de C's stdio.

+0

buen punto con solo 'w'; debería ser 'r +' si quisiéramos abrir el archivo para actualizarlo sin truncarlo. – tomasz

+0

@tomasz No estoy seguro de lo que estás hablando. Afaik, python no tiene una opción 'rw' para abrir. A menos que hable de las opciones de actualización ('r +', 'w +', etc.) que tienen el mismo efecto que el anterior. – cledoux

+0

karategeek6: tienes razón, he editado mi comentario con 'r +' justo después de que lo dejé. – tomasz

2

No realmente. El uso de anexar fuerza cualquier escritura para ir al final del archivo, donde puede buscar otra ubicación con una escritura.

1

Depende del sistema en el que esté trabajando; abrir un archivo con la bandera de agregar a menudo significa que va a escribir al final del archivo independientemente de la posición del puntero de escritura. En otras palabras, podría significar que su sistema operativo tiene que realizar búsquedas hasta el final del archivo antes de cada escritura o simplemente buscar el puntero hasta el final después de la apertura. Puede verificar fácilmente cómo funciona en su entorno, pero el único comportamiento garantizado busca hasta el final después de la apertura.

EDITAR: Como señalaron otras personas, el indicador w efectivamente trunca el archivo. Si desea abrirlo para actualizar sin eliminar el contenido actual, debería usar el indicador r+ (pero luego se permitiría leer, lo que no es cierto para a).

2

"W" eliminará los datos de contenido y luego buscará la posición final. Por lo tanto, terminará con un archivo vacío con un puntero en BOF y no en EOF. Use "A" para guardar los datos antiguos.

Cuestiones relacionadas