Writelines em Python
-
Use os métodos
write()
ewritelines()
para escrever texto especificado em um arquivo em Python -
Use os métodos
write()
ewritelines()
para escrever iteráveis em um arquivo em Python
Este tutorial irá apresentar e explicar a diferença entre os métodos write()
e writelines()
em Python.
Use os métodos write()
e writelines()
para escrever texto especificado em um arquivo em Python
O método write()
espera uma string como argumento e a grava no arquivo. Se fornecermos uma lista de strings, isso gerará uma exceção. O método writelines()
espera um argumento iterável. Além disso, o método write()
exibe a saída, mas não fornece um caractere de nova linha, enquanto o método writelines()
exibe a saída e fornece um caractere de nova linha no final da string. É importante notar que writelines()
não insere automaticamente uma nova linha após cada item no iterável. Temos que fornecer uma nova linha por nós mesmos. Se tivermos muitas linhas para gravar em um arquivo, writelines()
pode ser uma opção melhor. Ele tem um bom desempenho porque não cria uma string concatenada temporária, apenas iterando nas linhas.
No programa abaixo, abrimos o arquivo samplefile.txt
no modo de escrita. A variável lines
é uma tupla, ou seja, uma coleção imutável de strings. Quando tentamos executar o programa, ele gerou um erro do tipo exceção. Os argumentos que fornecemos para o método write()
são uma tupla que causou o erro. Aqui, usamos o método with
para manipulação de arquivos. Este método fornece melhor sintaxe e tratamento de exceções. Portanto, é uma boa prática usar o método with
quando aplicável. O método é útil porque todos os arquivos abertos serão fechados depois que um for concluído.
Código de exemplo:
# python 3.x
nl = "\n"
line1 = "Good"
line2 = "Morning"
line3 = "Sunshine"
lines = line1, nl, line2, nl, line3, nl
with open("samplefile.txt", "w") as f:
f.write(lines)
Produção:
TypeError: write() argument must be str, not tuple
Em um contexto semelhante, quando usamos writelines()
, o programa é executado com sucesso e um arquivo denominado samplefile.txt
é criado onde linhas
é passado como um argumento para o método writelines()
.
Código de exemplo:
# python 3.x
nl = "\n"
line1 = "Good"
line2 = "Morning"
line3 = "Sunshine"
lines = line1, nl, line2, nl, line3, nl
with open("samplefile.txt", "w") as f:
f.writelines(lines)
Produção:
Good
Morning
Sunshine
Para o mesmo programa, as várias linhas são concatenadas em uma única variável de string chamada lines_joined
, que é facilmente aceita como um argumento para o método write()
.
Código de exemplo:
# python 3.x
nl = "\n"
line1 = "Good"
line2 = "Morning"
line3 = "Sunshine"
lines_joined = line1 + nl + line2 + nl + line3 + nl
with open("samplefile.txt", "w") as f:
f.write(lines_joined)
Produção:
Good
Morning
Sunshine
Use os métodos write()
e writelines()
para escrever iteráveis em um arquivo em Python
O método join()
pega todos os itens em um iterável e os une em uma string. No programa abaixo, usamos o método join()
com '\n'
como uma cola para concatenar a string em lines
. É uma abordagem melhor para concatenação em vez de usar o operador +
.
Código de exemplo:
# python 3.x
lines = ["Hello", "World"]
with open("hello.txt", "w") as f:
f.write("\n".join(lines))
Produção:
Hello
World
É menos eficiente usar o método join()
para uma lista extremamente longa de strings. Nesse caso, uma string inteiramente nova e muito longa é criada na memória antes de ser gravada. Portanto, no programa abaixo, usamos uma expressão geradora para escrever as strings na nova linha. Aqui, os dados são escritos por partes.
Código de exemplo:
# python 3.x
lines = ["Hello", "World"]
with open("hello.txt", "w") as f:
for l in lines:
f.write("%s\n" % l)
Produção:
Hello
World
O mesmo programa acima é implementado por meio do método writelines()
. Faz o uso de uma expressão geradora e cria dinamicamente strings terminadas em nova linha. O método writelines()
itera sobre essa sequência de strings e grava cada item.
Código de exemplo:
# python 3.x
lines = ["Hello", "World"]
with open("hello.txt", "w") as file:
file.writelines("%s\n" % t for t in texts)
Produção:
Hello
World
Artigo relacionado - Python File
- Como obter todos os arquivos de um diretório
- Como Anexar Texto a um Arquivo em Python
- Como verificar se um arquivo existe em Python
- Como encontrar ficheiros com uma certa extensão apenas em Python
- Como ler linhas específicas a partir de um arquivo em Python
- Gravar linha por linha em um arquivo usando Python