Enviar um café pro programador

Mostrando postagens com marcador Como escrever em um arquivo. Mostrar todas as postagens
Mostrando postagens com marcador Como escrever em um arquivo. Mostrar todas as postagens

Como Processar Arquivos com Laço FOR (looping)

Neste tutorial de Python, vamos aprender como processarcom arquivos usando laços e loopings, nos permitindo trabalhar com grandes quantidades de informação.

Se desejar viver de programação, acesse:
Curso de Python com certificado

Para estudar por este e outros tutoriais offline, veja:
Apostila Python Progressivo

Arquivos e Laço FOR

Até o momento, em nossa seção de Arquivos em Python, trabalhamos com pequenos arquivos de textos, geralmente de duas ou três linhas, até para simplificar e agilizar nossos tutoriais de explicações.

Porém, o normal é termos arquivos grandes, com centenas ou milhares de linhas.

Quando você se tornar um programador Python profissional, vai ter planilhas documentos de texto, PDF e outros tipos de listas (como de funcionários e alunos), de milhares e milhares de linhas.

Então, vamos te mostrar como trabalhar com um arquivo usando o laço FOR.

Primeiro, entre no seguinte link e copie toda a lista:

Salve em um arquivo de texto de nome linguagens.txt

Vamos criar um script que pergunta ao usuário quantos nomes de linguagens de programação ele deseja ver.

Primeiro, criamos um objeto do tipo FILE de nome arquivo, para abrir linguagens.txt
Vamos pegar todo o conteúdo de texto e colocar numa lista de nome linguas, através do método readlines()

Usamos a função len() para contar quantos elementos tem a lista linguas, cujo número de elementos é o número de linhas do arquivo de texto, logo, mostrando o total de linguagens de programação que tem no texto.

Perguntamos ao usuário quantas linguagens ele deseja ver o nome e armazenamos na variável inteira num.

Por fim, entramos no laço FOR.
Vamos percorrer um total de num elementos, onde imprimimos o número de vezes que o usuário escolheu, imprimindo os elementos da lista linguas (usamos o método rstrip() para retirar o caractere de quebra de linha '\n\).

Veja como ficou nosso código:

arquivo = open('linguagens.txt', 'r')
linguas = arquivo.readlines()

print("Existem", len(linguas), "linguagens. Quantas deseja ver?")
num = int(input())

for count in range(num):
    print(str(count+1),":",linguas[count].rstrip('\n'))
    
arquivo.close()

Detectando o final de um arquivo: End of file ''

Tem um probleminha no código anterior.
Experimente digitar 717.

Aguarde tooooda a lista de linguagens de programação ser printada em sua tela e...erro:

Arquivos e loopings - Tutorial de Python - Curso com certificado

Deu erro de list index out of range, ou seja, você tentou acessar um índice da lista que não existe.
A lista tem 716 linguagens/linhas, e você tentou acessar mais que isso.

Poderíamos evitar esse erro fazendo uma coisa bem simples: detectando o final do arquivo.
Agora, ao invés de criar uma lista, vamos imprimir linha por linha do arquivo, através do método readline(), que lê uma linha por vez e retorna essa string, e armazena na variável linha que criamos.

Vamos usar o mesmo laço FOR pra imprimir o número de linguagens que o usuário quis ver.
Ao final, quando chega no fim do arquivo, o método readline() retorna uma string vazia.

Uma string vazia é simboliza, simplesmente, por: ''

Ou seja, a cada iteração do loop verificamos o conteúdo de linha.
Se for diferente de string vazia, imprimimos mais uma linha.
Se for vazia, dizemos que chegou no fim do arquivo.

Nosso código Python ficou:

arquivo = open('linguagens.txt', 'r')
num = int(input("Numero de linguagens: "))

for linha in arquivo:
    linha = arquivo.readline()

    if linha != '':
        print(linha.rstrip('\n'))
    else:
        print("Fim do arquivo")
    
arquivo.close()

Lendo Arquivos com laço FOR

Os exemplos anteriores foram mais para você aprender como pensa um programador, entender como as coisas funcionam por trás dos panos e te ajudar em lógica, ou seja, de realmente entender o que tá fazendo e o que tá acontecendo quando seu código roda.


Porém, existe uma maneira ainda mais simples de ler um arquivo de texto, sem usar readlines() nem a readline(), simplesmente imprimindo direto da variável do tipo File, e também sem precisar detectar o final de um arquivo.

Sabe onde fizemos:
  • for variavel in range(valor): 

Em vez de range(), basta usar o objeto do tipo File mesmo.
O Python subtende que seu range vai ser as linhas do arquivo.

Fica:
  • for linha in arquivo:

Prontinho.
A cada iteração do loop For o valor de linha é uma linha do arquivo de texto arquivo, que definimos e abrimos anteriormente (com a open()).

Para exibir o número correto de linguagens que o usuário solicitou, vamos usar uma variável para fazer a contagem, a count. O IF imprime uma linha, já quando essa variável passa do valor digitado pelo usuário, cai no ELSE e ele dá um break no laço FOR, terminando a leitura do arquivo.

Veja como ficou nosso código Python:

arquivo = open('linguagens.txt', 'r')
num = int(input("Numero de linguagens: "))
count=0

for linha in arquivo:
    if count<num:
        print(linha.rstrip('\n'))
        count=count+1
    else:
        break

arquivo.close()

Como Escrever em um Arquivo: write() e Modos de Abertura

Neste tutorial de nosso Curso de Python, vamos mostrar como fazer para escrever algo em um arquivo via programação Python e modos de abertura de arquivos.

Caso deseje trabalhar e ganhar dinheiro como programador Python:

Como Escrever em um Arquivo: Método write()


A palavra print em inglês significa imprimir.

Quando usamos a função print é porque estamos imprimindo, escrevendo na tela do shell e na tela de seu computador, é uma maneira de escrever.

Outra maneira de printar ou escrever é fazendo isso em arquivos. Ou seja, escrevemos via script Python dentro de um arquivo.

Mas, antes, precisamos ver o que é modo de abertura.



Modos de Abertura

Quando falamos em abrir arquivos via função open() fazemos somente:
open(caminho)

Onde caminho é uma string com o endereço do arquivo que queremos abrir.
Porém, isso é o mesmo que fazer:
  • open(caminho, 'r')

Esse r é de read, ou seja, leitura. É um modo de abertura, significa que estamos abrindo um arquivo para leitura, ou seja, modo de abertura read.

Nesse modo, podemos apenas ler os dados de um arquivo, não podemos alterar nada.





Escrevendo em Arquivos: write() e 'w'

Antes de escrevermos em um arquivo, precisamos abrir ele no modo escrita.
Para isso, fazemos:
  • open(caminho, 'w')

Em seguida, para escrevermos uma string em um arquivo de nome file.txt usamos o método write(), de objetos de tipo File.

Por fim, temos sempre que fechar o arquivo, ao término do script, através do método close().

O seguinte código Python escreve a string "Curso Python Progressivo" no arquivo file.txt:
meuArquivo = open('file.txt', 'w')
meuArquivo.write("Curso Python Progressivo")
meuArquivo.close()

Agora vá lá na pasta que está o seu script Python e veja que apareceu um arquivo de nome file.txt
Abra ele e veja que vai estar escrito lá dentro:
"Curso Python Progressivo".

Prontinho! Você acabou de escrever, printar uma string dentro de um arquivo em seu computador.

Detalhe para uma coisa: se você abrir e escrever em um arquivo que não existe, ele cria esse arquivo.

Adicionando Informações em um Arquivo: Modo append, 'a'

Agora temos um arquivo de nome file.txt e dentro dele teme scrito "Curso Python Progressivo".

Vamos escrever outra frase nele:
"O melhor curso de Python"

Repetimos o código:
meuArquivo = open('file.txt', 'w')
meuArquivo.write("O melhor curso de Python")
meuArquivo.close()

Agora vá lá e leia o que está escrito:
"O melhor curso de Python"

Epa!!!! Alto lá!!!
Cadê a string "Curso Python Progressivo" ? Queríamos adicionar uma string, e não substituir o que tinha lá.

Pois é, ao usar o modo de abertura write 'w', ele sobrescreve o arquivo, caso ele já exista.
Ou seja, apaga e cria um novo, com essa nova informação.

Para ADICIONAR, vamos usar o modo de adição (append mode), simbolizado por 'a' quando formos abrir nosso arquivo.

Repita o código lá de cima, com:
meuArquivo = open('file.txt', 'w')
meuArquivo.write("Curso Python Progressivo\n")
meuArquivo.close()

Agora, modifique seu código para:
meuArquivo = open('file.txt', 'a')
meuArquivo.write("O melhor curso de Python")
meuArquivo.close()

E abra o arquivo de texto:
Modos de abertura em Python: read ('r'), write ('w') e append ('a')


Voilá! Adicionamos mais uma string, sem apagar o que tinha lá antes!!!
Tudo isso porque usamos o modo de abertura 'a'.

Modos de abertura de Arquivos em Python

  • "a"  - Escreve ao final do arquivo; se este não existir, é criado
  • "r"  - Abre o arquivo para a leitura, se não existir, lançar um eerro de IOError
  • "r+" - Abra um arquivo para leitura e escrita. Se não existe, lança um erro IOError
  • "w"  - Abre um arquivo para escrita. Se existe, ele 'trunca' tudo e escreve por cima. Se não existir o arquivo, ele cria
  • "w+" - Abre para leitura e escrita. Se existe, apaga todo conteúdo e escreve por cima. Se não existir o arquivo, ele cria
  • "ab", "rb", "r+b", "wb", "w+b" - Abre arquivos para trabalhar com entrada e saída no modo binário, para plataformas Windows e Macintosh