Como ler um arquivo texto em Python

Publicado em 2010-10-26 por Vinicius Assef

Existem diversas formas de ler um arquivo txt em Python. A melhor para o seu caso vai depender da situação, mas certamente você deve seguir o modelo recomendado pela documentação da linguagem.

Independente de como você vai tratar os dados lidos, a documentação oficial do Python recomenda o seguinte modelo:

with open("entrada.txt") as arquivo:
    # fazer o que eu quiser com o arquivo
    # ...
# aqui `arquivo` jah estah fechado

Explicando: o with é um context processor e o Python garante fechar o arquivo mesmo se houver algum erro (exception, por exemplo) nas instruções que estiverem dentro dele. Além disso não é necessário dar nenhum comando explícito para fechá-lo. O Python faz isso automaticamente quando sair do escopo do with.

Não faça isso

Infelizmente vemos muitos exemplos mostrando uma forma não recomendada de ler arquivos em Python:

f = open("entrada.txt")
for linha in f:
    # fazer o que eu quiser com o arquivo
    # ...
f.close()

Não faça assim.

Como não há nenhum controle de exceptions, o arquivo pode ficar aberto em caso de algum erro na execução.

Jogando tudo para uma string

Se seu arquivo for pequeno e você quiser ter todo o conteúdo dele em uma única string, basta usar read():

with open("entrada.txt") as arquivo:
    tudo = arquivo.read()
print (tudo)

Lembre-se que os caracteres de término de linha estarão dentro da variável tudo. Todos eles, separando uma linha da outra.

Jogando para uma lista

Ainda trabalhando com arquivos pequenos, você pode preferir ter as linhas separadas umas das outras, em uma lista. Use readlines() para isso:

with open("entrada.txt") as arquivo:
    linhas = arquivo.readlines()

for linha in linhas:
    print (linha.rstrip())

Lembre-se que o caractere de término de linha estará no final de cada item de linhas. Por isso eu usei o rstrip() para me livrar dele.

Se você ainda quiser as linhas em uma lista, mas sem os caracteres de final de linha, faça assim:

with open("entrada.txt") as arquivo:
    linhas = arquivo.read().split("\n")

for linha in linhas:
    print (linha)

Lendo linha a linha

Se você precisar ler o arquivo linha a linha, talvez porque ele é grande, também é simples em Python:

with open("entrada.txt") as arquivo:
    for linha in arquivo:
        print (linha.rstrip())

Lembre do caractere de término de linha, em cada linha.

A vantagem dessa forma é que os dados não ficam todos em memória. Apenas uma linha por vez.

A forma que você vai ler um arquivo texto em Python depende da situação, mas use sempre o with para garantir que o arquivo não ficará aberto em caso de algum erro.

Vinicius Assef

Eu sou apaixonado por Python e shell script.

Aprenda com seus erros e dê nome certo às coisas.