Blog

Postado em em 29 de setembro de 2022

Recursão em Python – Como Funciona e Quando Usar?

Você sabe o que é a recursão em Python? Nessa aula eu vou te mostrar o que é e como isso pode te ajudar nos seus projetos!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

O que é Recursão em Python

Você já sabe como funciona a recursão em Python? Hoje eu quero te mostrar o que é uma recursão, como ela funciona e como isso pode te ajudar nos projetos de Python.

Quero te mostrar como usar esse recurso para que você aprenda como usar uma função que chama ela mesma. Calma que vai ficar mais claro durante a aula!

Como Trabalhar com Recursão em Python

O nosso desafio nessa aula é fazer um backup do sistema de vendas, então teremos vários arquivos e pastas e a ideia é procurar alguns arquivos específicos dentro de pastas e dentro de mais pastas.

Recursão em Python
Arquivos da pasta

Essa é a primeira pasta que temos e dentro dela temos arquivos e outra pasta, e dentro dessa pasta de Outros anos temos mais pastas e mais arquivos.

Então pense que vamos criar um código para dentro de uma pasta buscar por arquivos específicos, só que como dentro de uma pasta temos mais pastas, vamos acabar usando uma função que chama ela mesma.

Como assim? Se estamos fazendo uma verificação dentro de uma pasta estamos rodando uma função, só que quando formos passar em outra pasta vamos ter que chamar essa função novamente para rodar nessa nova pasta.

Então nessa aula nós vamos te mostrar como fazer isso e facilitar o entendimento de recursão Python!

Recursão em Python
Lista do sistema com todos os arquivos

Para esse exemplo vamos supor que você precise pedir o backup de alguns arquivos para sua equipe de TI, mas eles não conseguem fazer o backup de tudo, pois demora muito para puxar cada arquivo.

Então a ideia é pegar os relatórios que você já tem, que eles podem fazer o backup do que estiver faltando.

Só que a estrutura é aquela que falei inicialmente, então temos vários arquivos espalhado em diversas pastas e precisamos saber quais desses arquivos nós já temos.

E para isso é que vamos utilizar a recursão, para buscar de pasta em pasta cada um desses arquivos, e dentro das pastas que estão dentro das outras pastas também!

import os

lista_pastas = []

def pegar_arquivos_pasta(pasta):
    arquivos = os.listdir(pasta)
    for arquivo in arquivos:
        if "txt" in arquivo and "Vendas" in arquivo:
            nome_mes = arquivo.split()[-1].replace(".txt", "")
            lista_pastas.append(nome_mes)
        elif "txt" not in arquivo:
            pegar_arquivos_pasta(f'{pasta}/{arquivo}')

Esse é o código que vamos utilizar para poder verificar quais os relatórios que já temos. E vamos utilizar a recursão dentro dele para fazer isso.

Inicialmente temos a importação da biblioteca os que serve para manipulação de arquivos no PC.

Em seguida temos uma lista vazia, para que possamos adicionar cada um dos itens que encontrarmos dentro das pastas.

E então começamos com a definição da nossa função de pegar arquivos.

O único arquivo que vamos passar é a pasta, ou seja, o caminho dela. Logo abaixo nós vamos utilizar o comando os.listdir dessa pasta para verificar todos os arquivos dentro dela.

Feito isso vamos para um loop de repetição usando a estrutura for para percorrer todos os arquivos dessa primeira pasta.

Para cada um desses arquivos nós vamos testar se temos o texto “txt”, pois o nosso arquivo de relatório está no formato txt, e além disso vamos verificar também se tem o nome “Vendas”.

Fazemos essa verificação, pois só queremos os relatórios de vendas, então assim já estamos limitando a nossa pesquisa.

Caso um desses arquivos tenha o nome vendas e esteja no formato txt nós vamos executar o código dentro do if (estrutura condicional).

Dentro desse if nós vamos separar o nome do arquivo para pegar apenas o mês e ano do arquivo e vamos remover o “.txt” para que fique só o nome do relatório mesmo.

Que é referente ao mês e ao ano desse relatório, assim fica mais fácil analisar. Feito isso vamos registrar esse nome dentro da nossa lista de pastas que até o momento estava vazia.

Agora voltando ao nosso if, caso não encontre no nome do arquivo “txt” é porque ele é uma pasta.

IMPORTANTE: Aqui nós temos um ponto importante. Como sabemos que só temos pastas e arquivos de texto dentro de todas as pastas esse código funciona normalmente, pois se não tem extensão ele só pode ser uma pasta. Em outros casos você terá que avaliar se tem outras extensões de arquivos dentro das pastas!

Então se temos uma pasta nós vamos chamar a função pegar arquivos novamente, só que agora para essa pasta.

pegar_arquivos_pasta(f'{pasta}/{arquivo}’)

A estrutura é assim, mas como pasta é o nome da pasta atual, que no nosso caso é arquivos, e a primeira pasta encontrada é Outros anos, vamos ter o seguinte resultado.

Arquivos/Outros Anos

Então em {pasta} vamos ter o nome da pasta atual e em {arquivo} vamos ter o nome do arquivo que não tem extensão, que na verdade é uma pasta.

Estaríamos agora dentro da pasta Outros Anos. E isso vai se repetindo até conseguir todos os arquivos.

Isso quer dizer que vamos verificar arquivo por arquivo, se for pasta nós vamos entrar nela, caso contrário vamos verificar se é um arquivo de vendas, se for vamos registrar na nossa lista.

Resultado da busca pelos arquivos de vendas
Resultado da busca pelos arquivos de vendas

Sabendo disso podemos de fato rodar o código e mostrar a nossa lista de arquivos de vendas que foram encontrados.

Para finalizar nós vamos verificar quais dos arquivos inicias da lista meses_sistema (que tem o nome de todos os arquivos) não estão na lista de arquivos que acabamos de buscar.

Com isso vamos ter quais os arquivos que estão faltando, que são exatamente os arquivos que precisamos solicitar o backup.

Verificando os arquivos que estão faltando
Verificando os arquivos que estão faltando

Dessa forma nós conseguimos utilizar a recursão que é a chamada da função dentro dela mesma cada vez que encontrar uma pasta, pois a nossa função pega os nomes dos arquivos de vendas.

E sempre que temos uma nova pasta precisamos entrar nela também para verificar os arquivos dela, então isso se repete até acabar todos os arquivos e pastas.

Só que aqui nós não temos um loop infinito, temos uma recursão, até porque ela acaba assim que os arquivos e pastas acabarem, então tome cuidado com essa diferença.

Conclusão – Recursão em Python

Nessa aula eu te mostrei o funcionamento da recursão no Python com um exemplo que fica mais didático, mas você pode aplicar em outros casos.

A ideia é que você vai chamar a função dentro dela mesma para dar continuidade ao que está fazendo, é tipo um inception que é algo dentro dele mesmo. Tipo um sonho dentro de um sonho.

Agora você já tem mais um recurso para resolver alguns dos seus problemas com Python ou outra linguagem de programação!

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador