por - python send email




¿Cómo se adjunta a un archivo? (5)

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


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): 
    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()

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

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 aún estarán 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 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 siguientes escrituras se adjuntarán atómicamente al final del archivo (incluso a medida que el archivo crece por otras escrituras).

Algunos detalles más sobre cómo funciona el modo "a" ( probado en Linux solamente ). Incluso si busca volver, 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, la página de manpage fopen dice:

Al abrir un archivo en modo de adición (como el primer carácter del modo), todas las operaciones de escritura subsiguientes en esta secuencia se producen al final del archivo, como si precediera la llamada:

fseek(stream, 0, SEEK_END);

Antigua respuesta simplificada (sin usar with ):

Ejemplo: ( en un programa real, use with para cerrar el archivo - vea la documentación )

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

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

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

Entonces, para adjuntar a 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 solo hacen que su 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

Siempre hago esto

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

Es simple, pero muy útil.


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




append