Writelines em Python

Subodh Adhikari 30 janeiro 2023
  1. Use os métodos write() e writelines() para escrever texto especificado em um arquivo em Python
  2. Use os métodos write() e writelines() para escrever iteráveis ​​em um arquivo em Python
Writelines 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