Pregunta ¿Cómo se agrega a un archivo?


¿Cómo se agrega al archivo en lugar de sobreescribirlo? ¿Hay alguna función especial que se agregue al archivo?


1186
2018-01-16 16:20


origen


Respuestas:


with open("test.txt", "a") as myfile:
    myfile.write("appended text")

1887
2018-01-16 16:24



Debe abrir el archivo en el modo de adición, configurando "a" o "ab" como el modo. Ver abierto().

Cuando abre con el modo "a", la posición de escritura siempre estar al final del archivo (un apéndice). Puede abrir con "a +" para permitir la lectura, buscar hacia atrás y leer (¡pero todas las escrituras seguirán estando al final del archivo!).

Ejemplo:

>>> with open('test1','wb') as f:
        f.write('test')
>>> with open('test1','ab') as f:
        f.write('koko')
>>> with open('test1','rb') as f:
        f.read()
'testkoko'

Nota: Usar 'a' no es lo mismo que abrir con 'w' y buscar hasta el final del archivo: considere lo que podría suceder si otro programa abre el archivo y comienza a escribir entre la búsqueda y la escritura. En algunos sistemas operativos, abrir el archivo con 'a' garantiza que todas las siguientes escrituras se anexarán atómicamente al final del archivo (incluso cuando el archivo crezca por otras escrituras).


Algunos detalles más sobre cómo funciona el modo "a" (probado solo en Linux) Incluso si vuelve a buscar, 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'

De hecho, el fopen  página de manual estados:

Abrir un archivo en el modo de agregar (a como el primer carácter del modo)   hace que todas las operaciones de escritura posteriores a esta secuencia se produzcan en   fin de archivo, como si precediera a la llamada:

fseek(stream, 0, SEEK_END);

Vieja respuesta simplificada (sin usar with)

Ejemplo: (en un programa real utilizar with para cerrar el archivo - ver la documentación)

>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'

160
2018-01-16 16:23



Yo siempre hago esto,

f = open('filename.txt', 'a')
f.write("stuff")
f.close()

Es simple, pero muy útil.


34
2017-11-09 20:57



Probablemente quiera pasar "a" como el argumento de modo. Ver los documentos para abierto().

with open("foo", "a") as f:
    f.write("cool beans...")

Hay otras permutaciones del argumento de modo para actualizar (+), truncar (w) y el modo binario (b) pero comenzando con solo "a" es tu mejor apuesta.


32
2018-01-16 16:31



cuando usamos esta línea open(filename, "a"), ese a indica que al agregar el archivo, eso significa que permite insertar datos adicionales en el archivo existente.

Puedes usar estas líneas para anexar el texto en tu archivo

def FileSave(filename,content):
    with open(filename, "a") as myfile:
        myfile.write(content)

FileSave("test.txt","test1 \n")
FileSave("test.txt","test2 \n")

10
2017-12-29 15:51



Python tiene muchas variaciones fuera de los tres modos principales, estos tres modos son:

'w'   write text
'r'   read text
'a'   append text

Entonces, agregar un archivo es tan fácil como:

f = open('filename.txt', 'a') 
f.write('whatever you want to write here (in append mode) here.')

Luego están los modos que hacen que tu código tenga menos líneas:

'r+'  read + write text
'w+'  read + write text
'a+'  append + read text

Finalmente, están los modos de lectura / escritura en formato binario:

'rb'  read binary
'wb'  write binary
'ab'  append binary
'rb+' read + write binary
'wb+' read + write binary
'ab+' append + read binary

10
2017-10-27 17:27



Aquí está mi script, que básicamente cuenta el número de líneas, luego las agrega, luego las cuenta de nuevo para que tenga pruebas 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): 
    pass
print "%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 write
while 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): 
    pass
print "%s has %i lines after appending new lines" %(long_path, i)
long.close()

-4
2017-08-31 22:19