Como se anexa ao ficheiro em vez de o escrever por cima? Existe alguma função especial que apareça ao ficheiro?
Você precisa abrir o arquivo no modo anexo, definindo "a" ou "ab" como o modo. Veja open().
Quando você abre com o modo "a", a posição de escrita ** sempre estará no final do arquivo (um apêndice). Você pode abrir com "a+" para permitir a leitura, procurar para trás e ler (mas todas as escritas ainda estarão no final do arquivo!).
Exemplo:
>>> 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' não é o mesmo que abrir com 'w' e procurar até o fim do arquivo - considere o que poderia acontecer se outro programa abrisse o arquivo e começasse a escrever entre a procura e a escrita. Em alguns sistemas operacionais, abrir o arquivo com 'a' garante que todas as suas escritas seguintes serão anexadas atomicamente ao final do arquivo (mesmo que o arquivo cresça com outras escritas).
Mais alguns detalhes sobre como o modo "a" funciona (testado apenas no Linux). Mesmo se você procurar de volta, cada escrita será anexada ao final do arquivo:
>>> 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'
Na verdade, o fopen
manpage afirma:
Abrindo um arquivo no modo anexo (a como primeiro caractere do modo) faz com que todas as operações de escrita subsequentes a este fluxo ocorram em fim do ficheiro, como se tivesse precedido a chamada:
fseek(stream, 0, SEEK_END);
with
):Exemplo: (em um programa real utilizar with
para fechar o arquivo - ver a documentação)
>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'
Você provavelmente quer passar 'a' como o argumento de modo. Veja os documentos para open().
with open("foo", "a") as f:
f.write("cool beans...")
Há outras permutações do argumento do modo para atualizar (+), truncating (w) e modo binário (b), mas começar com apenas "a"
é a sua melhor aposta.