image

Bootcamps ilimitados + curso de inglês para sempre

80
%OFF
Article image
Antonio Guedes
Antonio Guedes16/09/2025 18:56
Compartir
Microsoft - Azure AZ-900Recomendado para tiMicrosoft - Azure AZ-900

Bibliotecas essenciais de Python - OS

  • #Python

Olá, imagine a seguinte situação: Você começa a desenvolver uma aplicação e necessita interagir com os diretórios do computador, talvez para salvar um arquivo, localizar um arquivo, ou até mesmo executar um comando no prompt de comandos automaticamente, como instalar um ou mais módulos ou desinstalá-los. Como fazer isso em Python?

Em Python há uma caixa de ferramentas, quase que mágica, que permite que você converse com o computador por meio do seu script. Esta caixa é o módulo OS. Imagine que você está ensinando um computador a realizar tarefas do dia a dia, o módulo OS é a ferramenta que permite o robô interaja com o ambiente que ele está. Que para nosso script, o ambiente é o sistema operacional (Windows, MacOs ou Linux).


De forma lúdica podemos ver nosso computador como uma biblioteca com muitas estantes (unidades) e prateleiras (diretórios) e livros (arquivos), o módulo OS nos dá comandos para:

¾   Ver o que tem nas estantes (unidades) e prateleiras (pastas/diretórios) – Permitir ver os arquivos que estão em cada diretório;

¾   Criar novas prateleiras (pastas/diretórios) ou novos livros;

¾   Mover livros ou prateleiras – Renomear ou mover os arquivos e diretórios/pastas;

¾   Apagar livros ou prateleiras; Excluir arquivos e diretórios/pastas;

¾   Saber sua localização atual na biblioteca: Descobrir qual é a pasta atual.


Primeiro vejamos como saber quais arquivos estão no diretório atual. Entenda como diretório atual, o mesmo que está o script python.

import os # Como todos os módulos python, o os é necessário ser importado antes de seu uso.

# Pega o caminho da pasta onde o script está rodando
pasta_atual = os.getcwd()
print(f”Estou na pasta: {pasta_atual}\n”)
# Saída:
# No Windows: C:\\Users\\nome_usuário\\diretório_atual
# No Linux: \home\nome_usuário\diretório_atual
# O caminho aparecerá completo tanto para Windows quanto para Linux

Como aplicações práticas:

- Caso você esteja criando um script para organizar fotos, então você pode usar o os.listdir(pasta) para ver todas as imagens que estão na pasta.

- Se estiver criando uma aplicação para backup de arquivos de texto, poderá usar o listdir para listar todos os arquivos com extensão ‘.txt’.


Como seria isso?

Você já sabe como listar os itens no diretório atual, entretanto o método ‘listdir’ retorna tanto arquivos quando pastas, então precisamos verificar se o item da lista é arquivo ou pasta,

import os

pasta_atual = '.' # Este é o endereço atual de navegação no sistema de arquivos, também pode ser obtido com getcwd(), entretanto, desta forma estamos utilizando uma abreviação do endereço do arquivo.

arquivos_txt = [] # uma lista para agrupar todos os arquivos de texto

for item in os.listdir(pasta_atual):
  # Criar o caminho completo para o item (isso é importante para verificar se o item é um arquivo ou diretório)
  caminho_completo_item = os.path.join(pasta_atual, item)

  # Verificar duas coisas:
  # 1. Se o item é realmente um arquivo (e não uma pasta)
  # 2. Se o nome do arquivo termina com '.txt' pois queremos apenas arquivos de texto.
  if os.path.isfile(caminho_completo_item) and item.endswith('.txt'):
      arquivos_txt.append(item)

print("Arquivos .txt encontrados:")
for nome_arquivo in arquivos_txt:
  print(nome_arquivo)


Você talvez me pergunte: Por que utilizar o endereço completo, se estamos verificando apenas no endereço atual? E por que verificar se é um arquivo ou pasta se estamos buscando apenas arquivos .txt e esta verificação também está sendo feita no ‘if’?


Por questões de segurança, ter certeza que o script funcionará de modo correto, vá em algum diretório de arquivos, crie uma pasta e quando nomear a pasta coloque .txt no final, execute o script sem a verificação se é arquivo e veja o que acontece. Pois é, o diretório que foi nomeado como .txt também aparecerá na listagem, entretanto não é um arquivo de texto, é um diretório nomeado erroneamente com .txt no final.

Esta forma de escrever o script é uma boa prática de robustez e segurança, incluindo a verificação se o item é um arquivo e se o nome do arquivo termina com .txt é uma boa prática de segurança, lhe dará certeza q todos os itens adicionados á lista são arquivos de texto.


Outra coisa que é possível fazer com o módulo OS é criar ou remover pastas para organizar os projetos.


Imagina que você precisa criar uma pasta no seu projeto ou até mesmo uma estrutura de pastas necessárias.

Vamos cogitar que você pergunta ao usuário qual o nome do projeto a ser criado e a pasta terá o nome do projeto:

import os

# Criar nova pasta
nova_pasta = input('Digite o nome da pasta: ').strip()

if not os.path.exists(nova_pasta):
try:
  os.mkdir(nova_pasta)
  print(f'{nova_pasta} criada com sucesso em: {os.getcwd()}')
except IOError as e:
  print(f"Erro ao tentar criar a pasta {nova_pasta}: {e}")
else:
print(f"{nova_pasta} já está no diretório atual {os.getcwd()}")


Agora vamos fazer algo mais complicado?

Vamos criar uma estrutura de um projeto html: index.html, pastas: src, images, styles, scripts, dentro de scripts o arquivo main.js e dentro de styles o arquivo main.css.

Vou trapacear um pouco para facilitar minha vida, no VsCode vou criar um arquivo index.html e vou usar o snippet para criar uma estrutura básica html5.

<!DOCTYPE html>
<html lang="pt-BR">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="styles/main.css">
  <title>Projeto {nome_projeto}</title>
</head>
<body>
  <h1>Seja Bem-Vindo(a) à página inicial do projeto '{nome_projeto}'</h1>
  <p>Este é a sua página pronta para ser desenvolvida 😉. </p>
  <p>Neste projeto você conta com a seguinte estrutura de pastas:</p>
  <ul>
    <li>src</li>
    <li>images</li>
    <li>scripts</li>
    <li>styles</li>
  </ul>
  <script src="scripts/main.js" type="module"></script>
</body>
</html>


Agora veja o script que segue com a criação das pastas e dos arquivos.

import os

def criar_projeto(nome_projeto):
  # Pasta atual
  pasta_atual = os.getcwd()
  projeto_root = os.path.join(pasta_atual, nome_projeto)

  if not os.path.exists(projeto_root):
      try:
          print(f"Criando a pasta do projeto")
          os.mkdir(nome_projeto)
          print(f'Pasta {nome_projeto} criada com sucesso - OK!')
          print('Criando estrutura do projeto')
          subpastas = ['src', 'images', 'scripts', 'styles']
    
          for pasta in subpastas:
              nova_pasta_path = os.path.join(projeto_root, pasta)

              if not os.path.exists(nova_pasta_path):
                  print(f"Criando a pasta {pasta}")
                  os.mkdir(nova_pasta_path)
              print(f"Pasta {pasta} criada.... OK!")

             if pasta == 'scripts':
                 script_path = os.path.join(nova_pasta_path, 'main.js')

                 script_conteudo = f"""Insira aqui o código do seu script!"""
                 with open(script_path, 'w') as f:
                     f.write(script_conteudo)
                 print('// Criando arquivo main.js.......OK!')

              elif pasta == 'styles':
                 style_path = os.path.join(nova_pasta_path, 'main.css')
                 style_content = f"""# Insira aqui seu código da folha de estilos"""
                 with open(style_path, 'w') as f:
                     f.write(style_content)
                 print('Criando folha de estilo......OK!')
  
          # Agora criar o index html
          html_path = os.path.join(projeto_root, 'index.html')

          # Estrutura da página index.html
          html_content = f"""<!DOCTYPE html>
<html lang="pt-BR">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="styles/main.css">
  <title>Projeto {nome_projeto}</title>
</head>
<body>
  <h1>Seja Bem-Vindo(a) à página inicial do projeto '{nome_projeto}'</h1>
  <p>Este é a sua página pronta para ser desenvolvida 😉.</p>
  <p>Neste projeto você conta com a seguinte estrutura de pastas:</p>
  <ul>
    <li>src</li>
    <li>images</li>
    <li>scripts</li>
    <li>styles</li>
  </ul>
  <script src="scripts/main.js" type="module"></script>
</body>
</html>"""
          with open(html_path, 'w', encoding='utf-8') as html:
              html.write(html_content)
          print(f"Arquivo index.html criado...OK!")

      except IOError as e:
          print(f"Erro ao tentar criar a pasta {nome_projeto}: {e}")
  else:
      print(f"{nome_projeto} já está no diretório atual {os.getcwd()}")

 
 
if __name__ == "__main__":
nome_do_projeto = input('Digite o nome do seu novo projeto: ').strip()
criar_projeto(nome_do_projeto)

Uma pequena explicação:

Primeiro solicitamos que o usuário decida o nome do projeto que ele quer criar, este será o nome do diretório raiz do projeto.

Depois que este diretório é criado, então uma lista contém o nome de todos os diretórios que devem ser criados para o projeto: src, images, scripts, styles. Dois desses diretórios possuirão arquivos base para edição: scripts, que tem o arquivo main.js e o diretório styles que tem o arquivo main.css.


Após a criação da estrutura, o script cria um arquivo index.html, que possui uma estrutura básica e já importa os arquivos: main.js e main.css.


Perceba que antes da criação dos diretórios é verificado se este já não existe, evitando tentativa de criar em duplicidade. Importante o uso do método: os.path.join() para que o diretório filho, seja criado aninhado ao pai, assim como a criação dos arquivos também.

Caso queria mais detalhes a respeito do script ou algum desses métodos pode perguntar.


Agora outro passo, o módulo OS do python também serve para executar comandos automaticamente. Vamos fazer um script simples somente para verificar quais módulos estão instalados pelo gerenciador pip? Então o comando a ser executado é o simples pip list.

O método do módulo que executa comandos do prompt é o os.system(comando). O argumento comando é uma string, que é o comando que queremos executar no terminal. Por exemplo, para limpar o terminal fazemos: os.system(‘cls’) ou os.system(‘clear’). No nosso caso que queremos executar o comando pip list, então o comando fica: os.system(‘pip list’).

Uma breve explicação: Este método é implementado chamando a função C padrão system(), e tem suas mesmas limitações, um modo mais poderoso para executar comandos é utilizando o módulo: subprocess, (https://docs.python.org/pt-br/3.7/library/subprocess.html#module-subprocess)

O módulo OS é muito poderoso, com ele é possível fazer muitas coisas como iniciar processos, encerrá-los, verificar dados de processador e por aí vai. Caso tenha interesse em aprender mais como usar o Módulo OS, acesse a documentação no endereço: https://docs.python.org/pt-br/3.7/library/os.html.

Espero que este início no módulo OS te dê mais curiosidade para aprofundar mais.

Compartir
Recomendado para ti
Suzano - Python Developer #2
Suzano - Python Developer
BairesDev - Machine Learning Practitioner
Comentarios (0)
Recomendado para tiMicrosoft - Azure AZ-900