Noté que muchas personas están usando el with open(file, "a")método. Soy quizá anticuado, pero ¿cuál es la ventaja sobreopen(file, "a") ... file.close()
75
bluewoodtree: Los beneficios son similares a los de RAII en C ++. Si olvida close (), puede pasar un tiempo antes de que el archivo se cierre realmente. Es más fácil pensar en olvidarlo cuando el código tiene múltiples puntos de salida, excepciones, etc.
Petter
54
print("appended text", file=myfile)También es posible, para una API más familiar.
Thomas Ahle
206
Debe abrir el archivo en modo de adición, configurando "a" o "ab" como modo. Ver abierto () .
Cuando abre con el modo "a", la posición de escritura siempre estará al final del archivo (un anexo). Puede abrir con "a +" para permitir la lectura, buscar hacia atrás y leer (¡pero todas las escrituras seguirán al final del archivo!).
Nota : Usar 'a' no es lo mismo que abrir con 'w' y buscar hasta el final del archivo: considere lo que podría pasar si otro programa abriera el archivo y comenzara a escribir entre la búsqueda y la escritura. En algunos sistemas operativos, abrir el archivo con 'a' garantiza que todas sus escrituras siguientes se agregarán atómicamente al final del archivo (incluso cuando el archivo crece por otras escrituras).
Algunos detalles más sobre cómo funciona el modo "a" ( probado solo en Linux ). Incluso si busca hacia atrás, cada escritura se agregará al final del archivo:
>>> f = open('test','a+')# Not using 'with' just to simplify the example REPL session>>> f.write('hi')>>> f.seek(0)>>> f.read()'hi'>>> f.seek(0)>>> f.write('bye')# Will still append despite the seek(0)!>>> f.seek(0)>>> f.read()'hibye'
Al abrir un archivo en modo anexar (a como primer carácter del modo), todas las operaciones de escritura posteriores en esta secuencia se producen al final del archivo, como si precediera a la llamada:
fseek(stream,0, SEEK_END);
Antigua respuesta simplificada (sin usar with):
Ejemplo: ( en un programa real, use withpara cerrar el archivo ; consulte la documentación )
cuando usamos esta línea open(filename, "a"), eso aindica la adición del archivo, eso significa permitir insertar datos adicionales en el archivo existente.
Puede usar las siguientes líneas para agregar el texto en su archivo
with open("test.txt","a")as myfile:
myfile.write("append me")
Declaramos la variable myfilepara abrir un archivo llamadotest.txt . Abrir toma 2 argumentos, el archivo que queremos abrir y una cadena que representa los tipos de permiso u operación que queremos hacer en el archivo
aquí están las opciones de modo de archivo
Descripción del modo
'r' Este es el modo predeterminado. Abre archivo para leer.
'w' Este modo Abre el archivo para escribir.
Si el archivo no existe, crea un nuevo archivo.
Si el archivo existe, trunca el archivo.
'x' Crea un nuevo archivo. Si el archivo ya existe, la operación falla.
'a' Abre el archivo en modo agregar.
Si el archivo no existe, crea un nuevo archivo.
't' Este es el modo predeterminado. Se abre en modo texto.
'b' Esto se abre en modo binario.
'+' Esto abrirá un archivo para leer y escribir (actualizar)
Si desea escribir en otro lugar que no sea el final, puede usar 'r+'† :
import os
with open(file,'r+')as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
Finalmente, el 'w+'parámetro otorga aún más libertad. Específicamente, le permite crear el archivo si no existe, así como vaciar el contenido de un archivo que existe actualmente.
"file.close" se llama automáticamente al final del bloque "with", que es la ventaja de la palabra clave. Además, el OP preguntó acerca de cómo abrir un archivo para agregarlo. El modo "+" no es necesario a menos que desee leer también.
Erik Knowles
-6
Aquí está mi script, que básicamente cuenta el número de líneas, luego las agrega y luego las cuenta nuevamente para que tenga evidencia de que funcionó.
shortPath ="../file_to_be_appended"
short = open(shortPath,'r')## this counts how many line are originally in the file:
long_path ="../file_to_be_appended_to"
long = open(long_path,'r')for i,l in enumerate(long):passprint"%s has %i lines initially"%(long_path,i)
long.close()
long = open(long_path,'a')## now open long file to append
l =True## will be a line
c =0## count the number of lines you writewhile l:try:
l = short.next()## when you run out of lines, this breaks and the except statement is run
c +=1
long.write(l)except:
l =None
long.close()print"Done!, wrote %s lines"%c
## finally, count how many lines are left.
long = open(long_path,'r')for i,l in enumerate(long):passprint"%s has %i lines after appending new lines"%(long_path, i)
long.close()
with open(file, "a")
método. Soy quizá anticuado, pero ¿cuál es la ventaja sobreopen(file, "a") ... file.close()
print("appended text", file=myfile)
También es posible, para una API más familiar.Debe abrir el archivo en modo de adición, configurando "a" o "ab" como modo. Ver abierto () .
Cuando abre con el modo "a", la posición de escritura siempre estará al final del archivo (un anexo). Puede abrir con "a +" para permitir la lectura, buscar hacia atrás y leer (¡pero todas las escrituras seguirán al final del archivo!).
Ejemplo:
Nota : Usar 'a' no es lo mismo que abrir con 'w' y buscar hasta el final del archivo: considere lo que podría pasar si otro programa abriera el archivo y comenzara a escribir entre la búsqueda y la escritura. En algunos sistemas operativos, abrir el archivo con 'a' garantiza que todas sus escrituras siguientes se agregarán atómicamente al final del archivo (incluso cuando el archivo crece por otras escrituras).
Algunos detalles más sobre cómo funciona el modo "a" ( probado solo en Linux ). Incluso si busca hacia atrás, cada escritura se agregará al final del archivo:
De hecho, la página de
fopen
manual dice:Antigua respuesta simplificada (sin usar
with
):Ejemplo: ( en un programa real, use
with
para cerrar el archivo ; consulte la documentación )fuente
Siempre hago esto
Es simple, pero muy útil.
fuente
Probablemente quiera pasar
"a"
como argumento de modo. Ver los documentos para open () .Hay otras permutaciones del argumento de modo para actualizar (+), truncar (w) y binario (b), pero comenzar con solo
"a"
es su mejor opción.fuente
file
Sombra una función incorporada. No lo use para variables.file
ya no está incluido en Python 3. Incluso en Python 2, se usa muy raramente . Abrir un archivo es una operación común. Está bien usar elfile
nombre aquí en Python 2 y 3. Sepa cuándo ser inconsistente.Python tiene muchas variaciones de los tres modos principales, estos tres modos son:
Entonces, agregar a un archivo es tan fácil como:
Luego están los modos que solo hacen que su código tenga menos líneas:
Finalmente, están los modos de lectura / escritura en formato binario:
fuente
cuando usamos esta línea
open(filename, "a")
, esoa
indica la adición del archivo, eso significa permitir insertar datos adicionales en el archivo existente.Puede usar las siguientes líneas para agregar el texto en su archivo
fuente
También puedes hacerlo en
print
lugar dewrite
:Si test.txt no existe, se creará ...
fuente
También puede abrir el archivo en
r+
modo y luego establecer la posición del archivo al final del archivo.Abrir el archivo en
r+
modo le permitirá escribir en otras posiciones de archivo además del final, mientrasa
ya+
la escritura vigor hasta el final.fuente
si quieres adjuntar a un archivo
Declaramos la variable
myfile
para abrir un archivo llamadotest.txt
. Abrir toma 2 argumentos, el archivo que queremos abrir y una cadena que representa los tipos de permiso u operación que queremos hacer en el archivoaquí están las opciones de modo de archivo
fuente
El
'a'
parámetro significa modo anexar. Si no desea usarlowith open
cada vez, puede escribir fácilmente una función para que lo haga por usted:Si desea escribir en otro lugar que no sea el final, puede usar
'r+'
† :Finalmente, el
'w+'
parámetro otorga aún más libertad. Específicamente, le permite crear el archivo si no existe, así como vaciar el contenido de un archivo que existe actualmente.† El crédito para esta función va a @Primusa
fuente
La forma más sencilla de agregar más texto al final de un archivo sería usar:
El
a+
en laopen(...)
instrucción le indica que abra el archivo en modo agregar y permite el acceso de lectura y escritura.También es una buena práctica usar
file.close()
para cerrar cualquier archivo que haya abierto una vez que haya terminado de usarlos.fuente
Aquí está mi script, que básicamente cuenta el número de líneas, luego las agrega y luego las cuenta nuevamente para que tenga evidencia de que funcionó.
fuente