Pular para o conteúdo principal

Como obter o diretório atual em Python

Para obter o diretório de trabalho atual em Python, você pode usar os.getcwd() do módulo os ou pathlib.Path.cwd() do módulo pathlib.
Actualizado 16 de jan. de 2025

Muitos programas Python precisam navegar no sistema de arquivos para ler e gravar arquivos. Uma operação comum é buscar o diretório de trabalho atual, que geralmente é abreviado como CWD.

O Python tem dois módulos principais que podem ser usados para acessar os caminhos do sistema de arquivos: omódulo os e o módulo pathlib .

O módulo os oferece a abordagem tradicional para obter o diretório de trabalho atual e trabalha com caminhos e com o sistema de arquivos.

O pathlib é um módulo mais recente que oferece uma abordagem orientada a objetos que é robusta e multiplataforma.

Neste tutorial, exploro as várias técnicas para buscar e manipular o diretório de trabalho atual. Se você quiser saber mais sobre Python, fique à vontade para explorar algumas das minhas outras publicações no blog:

Python: Como obter o diretório de trabalho atual (CWD)

O diretório de trabalho atual é o diretório no qual um programa Python é executado. Ele serve como ponto de referência para caminhos relativos de arquivos e permite que o programa acesse arquivos e recursos dentro da hierarquia de diretórios.

Vamos ver como você pode acessar o diretório de trabalho atual usando os módulos os e pathlib e comparar as duas soluções.

Usando os.getcwd()

O módulo os permite o acesso ao sistema operacional do computador. A função getcwd() obtém o diretório de trabalho atual:

import os
cwd = os.getcwd()
print(cwd)
/Users/sg/Documents/GitHub/datacamp

A saída mostra o caminho do diretório que contém o script. O formato do caminho depende do sistema operacional. A saída acima é para sistemas operacionais POSIX, como Linux, Unix e macOS.

O mesmo caminho em um sistema Windows seria exibido da seguinte forma:

C:\Users\sg\Documents\GitHub\datacamp

O valor retornado por os.getcwd() é uma cadeia de caracteres:

print(type(cwd))
<class 'str'>

Portanto, precisamos usar métodos de cadeia de caracteres e outras operações de cadeia de caracteres para lidar com esse caminho.

Usando pathlib.Path.cwd()

O Python 3.4 introduziu o módulo pathlib, que oferece uma abordagem orientada a objetos para acessar e manipular caminhos de arquivos. A classe principal em pathlib é Path, que podemos importar antes de obter o diretório de trabalho atual:

from pathlib import Path
cwd = Path.cwd()
print(cwd)
/Users/sg/Documents/GitHub/datacamp

A saída impressa de Path.cwd() é semelhante ao valor retornado por os.getcwd(). No entanto, o site Path.cwd() não retorna uma string. Você pode confirmar isso imprimindo o tipo do objeto retornado ou exibindo sua representação oficial em string usando repr():

print(type(cwd))
print(repr(cwd))
<class 'pathlib.PosixPath'>
PosixPath('/Users/sg/Documents/GitHub/datacamp')

Em um computador Windows, Path.cwd() retorna um objeto WindowsPath.

Os objetos PosixPath e WindowsPath oferecem funcionalidade semelhante para permitir programas entre plataformas. Aqui estão alguns dos atributos desses objetos:

print(cwd.parent)
print(cwd.name)
/Users/sg/Documents/GitHub
datacamp

Sempre que possível, é preferível que você use o módulo pathlib, que é mais moderno e facilita o tratamento de caminhos. Você pode ler este guia completo para você usar o pathlib em Python se você quiser saber mais.

Trabalhando com o diretório atual

Os programas Python geralmente precisam manipular o caminho, por exemplo, para salvar um arquivo em uma subpasta. Vamos supor que precisamos criar um novo subdiretório em nosso diretório de trabalho atual e salvar um arquivo de texto na nova pasta.

Usando o os módulo

A função getcwd() no módulo os retorna uma cadeia de caracteres. Portanto, é possível alterar manualmente essa cadeia de caracteres para modificar o caminho. No entanto, as modificações necessárias variam de acordo com o sistema operacional, pois sistemas diferentes têm formatos de caminho diferentes. Uma opção melhor é usar o site os.path.join():

import os
cwd = os.getcwd()
output_path = os.path.join(cwd, "testing_os")
print(output_path)
/Users/sg/Documents/GitHub/datacamp/testing_os

O caminho que os.path.join() retorna está no formato correto para o sistema operacional que está sendo usado. Isso retorna uma cadeia de caracteres com o novo caminho. Podemos verificar se essa subpasta existe com os.path.exists(), que retorna um booleano:

print(os.path.exists(output_path))
False

Isso mostra que o caminho representado por output_path ainda não existe. O módulo os fornece ferramentas para que você crie essa pasta. A função os.mkdir() cria um novo diretório:

os.mkdir(output_path)
print(os.path.exists(output_path))
True

A nova subpasta agora existe e novos arquivos podem ser salvos nessa pasta:

output_file = os.path.join(output_path, "test.txt")
with open(output_file, "w") as file:
    file.write("Testing path modification with the 'os' module")

A variável output_file contém o nome do arquivo de saída desejado com o caminho completo. Esse arquivo de texto é criado na subpasta /testing_os dentro do diretório de trabalho atual.

Também podemos listar todos os itens em uma pasta usando os.listdir():

for item in os.listdir(output_path):
    print(item)
test.txt

A função os.listdir() retorna uma lista com todos os itens do diretório. Esse código percorre essa lista para exibir cada arquivo ou pasta em uma linha separada. Neste exemplo, o diretório contém um único arquivo de texto.

Usando o pathlib módulo

O módulo pathlib mais recente também oferece ferramentas para que você crie novos caminhos. Este módulo usa o operador de barra / para combinar elementos em um caminho. Esse é o mesmo operador usado para a divisão de tipos de dados numéricos, mas também é o caractere usado em caminhos de arquivos nos sistemas operacionais POSIX. Vamos criar um novo caminho e verificar se ele ainda não existe:

from pathlib import Path
cwd = Path.cwd()
output_path = cwd / "testing_pathlib"
print(output_path)
print(Path.exists(output_path))
/Users/sg/Documents/GitHub/datacamp/testing_pathlib
False

A classe Path tem seu próprio método .mkdir() para criar um novo diretório:

Path.mkdir(output_path)
print(Path.exists(output_path))
True

Como output_path é um objeto PosixPath ou WindowsPath, podemos usar o operador de barra em qualquer lugar para criar um novo caminho:

with open(output_path / "test.txt", "w") as file:
    file.write("Testing path modification with the 'pathlib' module")

O novo arquivo de texto é criado na pasta /testing_pathlib.

Podemos usar o método Path .iterdir() para iterar cada item em uma pasta:

for item in Path.iterdir(output_path):
    print(item)
/Users/sg/Documents/GitHub/datacamp/testing_pathlib/test.txt

Como ocorre com outras ferramentas em pathlib, o valor retornado não é uma cadeia de caracteres. Em vez disso, é um objeto PosixPath ou WindowsPath. Você pode usar o atributo .name para exibir o nome do arquivo ou da pasta sem o caminho completo:

for item in Path.iterdir(output_path):
    print(item.name)
test.txt

Enquanto os.listdir() retorna uma lista, pathlib.Path.iterdir() retorna um objeto generator (você pode ler este tutorial sobre Iteradores e geradores do Python do Python se você precisar de uma atualização):

print(Path.iterdir(cwd))
<generator object Path.iterdir at 0x1036b2c20>

Esse comportamento segue as práticas recomendadas do Python moderno, pois os iteradores e geradores são mais eficientes em determinadas situações.

Alteração do diretório de trabalho atual (CWD)

Também é possível alterar o diretório de trabalho atual diretamente de um programa Python usando os.chdir(). Como essa não é uma operação diretamente relacionada ao caminho, não há uma versão alternativa em pathlib. No entanto, ainda podemos usar os objetos pathlib.Path como argumentos:

import os
from pathlib import Path
cwd = Path.cwd()
print(cwd)

os.chdir(cwd.parent)
cwd = Path.cwd()
print(cwd)
/Users/sg/Documents/GitHub/datacamp
/Users/sg/Documents/GitHub

O diretório de trabalho foi alterado. Também podemos usar o site cwd.parent.resolve() para garantir que todos os links simbólicos sejam tratados corretamente. O argumento em os.chdir() também pode ser uma cadeia de caracteres, como os caminhos retornados pelas funções no módulo os.

É necessário ter cuidado ao alterar o diretório de trabalho em um programa para garantir que você não tenha nenhum comportamento inesperado.

Práticas recomendadas e dicas

Aqui estão algumas práticas recomendadas e dicas para você trabalhar com caminhos em Python:

Práticas recomendadas para trabalhar com caminhos em Python

Conclusão

A navegação e a manipulação de caminhos de arquivos é um requisito comum em muitos programas Python. O módulo os fornece as funções tradicionais para lidar com essas tarefas, enquanto o módulo pathlib oferece uma abordagem mais moderna e orientada a objetos. O uso do site pathlib não apenas simplifica muitas operações, mas também garante que seu código permaneça multiplataforma e mais fácil de ler.

Não importa se você está mantendo uma base de código existente que usa o os ou iniciando um novo projeto em que pode aproveitar o pathlib, entender os dois módulos e seus recursos lhe dará a flexibilidade e a confiança para gerenciar caminhos em qualquer projeto Python.

Você pode continuar sua jornada de aprendizado de Python com esses cursos:


Stephen Gruppetta's photo
Author
Stephen Gruppetta
LinkedIn
Twitter

Estudei Física e Matemática em nível superior na Universidade de Malta. Depois, mudei-me para Londres e fiz meu doutorado em Física no Imperial College. Trabalhei em novas técnicas ópticas para obter imagens da retina humana. Agora, meu foco é escrever sobre Python, comunicar sobre Python e ensinar Python.

Temas

Aprenda Python com estes cursos!

curso

Introduction to Python for Developers

3 hr
40.3K
Master the fundamentals of programming in Python. No prior knowledge required!
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

blog

Tutorial: Como instalar o Python no macOS e no Windows

Saiba como instalar o Python em sua máquina pessoal com este tutorial passo a passo. Se você é um usuário do Windows ou do macOS, descubra vários métodos para começar a usar o Python em sua máquina.
Richie Cotton's photo

Richie Cotton

14 min

Data Skills

blog

6 práticas recomendadas de Python para um código melhor

Descubra as práticas recomendadas de codificação Python para escrever os melhores scripts Python da categoria.
Javier Canales Luna's photo

Javier Canales Luna

13 min

tutorial

Configuração do VSCode para Python: Um guia completo

Experimente uma forma simples, divertida e produtiva de desenvolvimento em Python, aprendendo sobre o VSCode e suas extensões e recursos.
Abid Ali Awan's photo

Abid Ali Awan

16 min

tutorial

Tutorial de como executar scripts Python

Saiba como executar um script Python a partir da linha de comando e também como fornecer argumentos de linha de comando ao seu script.
Aditya Sharma's photo

Aditya Sharma

10 min

tutorial

Dois métodos simples para converter um arquivo Python em um arquivo Exe

Saiba o que é um arquivo executável e por que ele pode ser útil enquanto você analisa como converter um script Python em um executável usando o auto-py-to-exe.
Kurtis Pykes 's photo

Kurtis Pykes

6 min

tutorial

Tutorial do Python Excel: O guia definitivo

Saiba como ler e importar arquivos do Excel em Python, gravar dados nessas planilhas e encontrar os melhores pacotes para fazer isso.
Natassha Selvaraj's photo

Natassha Selvaraj

30 min

Ver maisVer mais