python enviar - ¿Cómo se adjunta a un archivo?




correo con (7)

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

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

Probablemente quieras pasar "a" como argumento de modo. Ver los documentos para open() .

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

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


Siempre hago esto

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

Es simple, pero muy útil.


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

Puede usar las siguientes líneas para agregar el texto a su archivo

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

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

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'

def list_files(path):
    # returns a list of names (with extension, without full path) of all files 
    # in folder path
    files = []
    for name in os.listdir(path):
        if os.path.isfile(os.path.join(path, name)):
            files.append(name)
    return files 




python file append