Notei que muitas pessoas estão usando o with open(file, "a")método. Talvez eu seja antiquado, mas qual é a vantagem sobre #open(file, "a") ... file.close()
75
bluewoodtree: Os benefícios são semelhantes aos do RAII em C ++. Se você esquecer close (), pode demorar um pouco até que o arquivo seja realmente fechado. É mais fácil pensar em esquecê-lo quando o código tiver vários pontos de saída, exceções e assim por diante.
Petter
54
print("appended text", file=myfile)também é possível, para uma API mais familiar.
Thomas Ahle
206
Você precisa abrir o arquivo no modo de acréscimo, definindo "a" ou "ab" como o modo. Veja open () .
Quando você abre no modo "a", a posição de gravação estará sempre no final do arquivo (um anexo). Você pode abrir com "a +" para permitir a leitura, procurar para trás e ler (mas todas as gravações ainda estarão no final do arquivo!).
Nota : Usar 'a' não é o mesmo que abrir com 'w' e procurar o final do arquivo - considere o que pode acontecer se outro programa abrir o arquivo e começar a gravar entre a busca e a gravação. Em alguns sistemas operacionais, abrir o arquivo com 'a' garante que todas as suas gravações a seguir serão anexadas atomicamente ao final do arquivo (mesmo que o arquivo cresça com outras gravações).
Mais alguns detalhes sobre como o modo "a" opera ( testado apenas no Linux ). Mesmo se você procurar novamente, toda gravação 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'
A abertura de um arquivo no modo de acréscimo (a como o primeiro caractere do modo) faz com que todas as operações de gravação subseqüentes nesse fluxo ocorram no final do arquivo, como se preceda a chamada:
fseek(stream,0, SEEK_END);
Resposta simplificada antiga (sem uso with):
Exemplo: ( em um programa real, use withpara fechar o arquivo - consulte a documentação )
quando usamos esta linha open(filename, "a"), que aindica o acréscimo do arquivo, isso significa permitir a inserção de dados extras no arquivo existente.
Você pode apenas usar as seguintes linhas para acrescentar o texto no seu arquivo
with open("test.txt","a")as myfile:
myfile.write("append me")
Declaramos a variável myfilepara abrir um arquivo chamado test.txt. Open recebe 2 argumentos, o arquivo que queremos abrir e uma string que representa os tipos de permissão ou operação que queremos fazer no arquivo
aqui estão as opções do modo de arquivo
Descrição do modo
'r' Este é o modo padrão. Abre arquivo para leitura.
'w' Este modo Abre o arquivo para gravação.
Se o arquivo não existir, ele criará um novo arquivo.
Se o arquivo existir, ele truncará o arquivo.
'x' Cria um novo arquivo. Se o arquivo já existir, a operação falhará.
'a' Abrir arquivo no modo de acréscimo.
Se o arquivo não existir, ele criará um novo arquivo.
't' Este é o modo padrão. Abre no modo de texto.
'b' Isso abre no modo binário.
'+' Isso abrirá um arquivo para leitura e gravação (atualização)
Se você quiser escrever em outro lugar que não seja o final, use 'r+'† :
import os
with open(file,'r+')as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
Finalmente, o 'w+'parâmetro concede ainda mais liberdade. Especificamente, ele permite que você crie o arquivo se ele não existir, além de esvaziar o conteúdo de um arquivo que existe atualmente.
"file.close" é chamado automaticamente no final do bloco "with", que é a vantagem da palavra-chave. Além disso, o OP perguntou sobre a abertura de um arquivo para anexar. O modo "+" não é necessário, a menos que você queira ler também.
Erik Knowles
-6
Aqui está o meu script, que basicamente conta o número de linhas, depois as anexa e as conta novamente para que você tenha provas de que funcionou.
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. Talvez eu seja antiquado, mas qual é a vantagem sobre #open(file, "a") ... file.close()
print("appended text", file=myfile)
também é possível, para uma API mais familiar.Você precisa abrir o arquivo no modo de acréscimo, definindo "a" ou "ab" como o modo. Veja open () .
Quando você abre no modo "a", a posição de gravação estará sempre no final do arquivo (um anexo). Você pode abrir com "a +" para permitir a leitura, procurar para trás e ler (mas todas as gravações ainda estarão no final do arquivo!).
Exemplo:
Nota : Usar 'a' não é o mesmo que abrir com 'w' e procurar o final do arquivo - considere o que pode acontecer se outro programa abrir o arquivo e começar a gravar entre a busca e a gravação. Em alguns sistemas operacionais, abrir o arquivo com 'a' garante que todas as suas gravações a seguir serão anexadas atomicamente ao final do arquivo (mesmo que o arquivo cresça com outras gravações).
Mais alguns detalhes sobre como o modo "a" opera ( testado apenas no Linux ). Mesmo se você procurar novamente, toda gravação será anexada ao final do arquivo:
De fato, a página de
fopen
manual declara:Resposta simplificada antiga (sem uso
with
):Exemplo: ( em um programa real, use
with
para fechar o arquivo - consulte a documentação )fonte
Eu sempre faço isso,
É simples, mas muito útil.
fonte
Você provavelmente deseja passar
"a"
como argumento de modo. Veja os documentos para open () .Existem outras permutações do argumento mode para atualização (+), truncamento (w) e binário (b), mas começar com just
"a"
é a sua melhor aposta.fonte
file
sombreia uma função interna. Não use para variáveis.file
não é mais um componente do Python 3. Mesmo no Python 2, é usado muito raramente . Abrir um arquivo é uma operação comum. Não há problema em usar ofile
nome aqui no Python 2 e 3. Saiba quando ser inconsistente.O Python tem muitas variações dos três modos principais, esses três modos são:
Portanto, para anexar a um arquivo, é tão fácil quanto:
Depois, existem os modos que apenas tornam seu código menos linhas:
Finalmente, existem os modos de leitura / gravação em formato binário:
fonte
quando usamos esta linha
open(filename, "a")
, quea
indica o acréscimo do arquivo, isso significa permitir a inserção de dados extras no arquivo existente.Você pode apenas usar as seguintes linhas para acrescentar o texto no seu arquivo
fonte
Você também pode fazer isso em
print
vez dewrite
:Se test.txt não existir, ele será criado ...
fonte
Você também pode abrir o arquivo no
r+
modo e, em seguida, definir a posição do arquivo no final do arquivo.Abrindo o arquivo em
r+
modo vai deixar você escrever para outras posições de arquivo, além do fim, enquantoa
ea+
força de escrita até o fim.fonte
se você deseja anexar a um arquivo
Declaramos a variável
myfile
para abrir um arquivo chamadotest.txt
. Open recebe 2 argumentos, o arquivo que queremos abrir e uma string que representa os tipos de permissão ou operação que queremos fazer no arquivoaqui estão as opções do modo de arquivo
fonte
O
'a'
parâmetro significa modo de acréscimo. Se você não quiser usarwith open
cada vez, poderá escrever facilmente uma função para fazer isso por você:Se você quiser escrever em outro lugar que não seja o final, use
'r+'
† :Finalmente, o
'w+'
parâmetro concede ainda mais liberdade. Especificamente, ele permite que você crie o arquivo se ele não existir, além de esvaziar o conteúdo de um arquivo que existe atualmente.† O crédito para esta função vai para @Primusa
fonte
A maneira mais simples de acrescentar mais texto ao final de um arquivo seria usar:
O
a+
naopen(...)
instrução instrui a abrir o arquivo no modo de acréscimo e permite acesso de leitura e gravação.Também é sempre uma boa prática usar
file.close()
para fechar todos os arquivos que você abriu quando terminar de usá-los.fonte
Aqui está o meu script, que basicamente conta o número de linhas, depois as anexa e as conta novamente para que você tenha provas de que funcionou.
fonte