Resumo : neste tutorial, você aprenderá como usar a classe Python Path do módulo pathlib para interagir com o sistema de arquivos entre plataformas de maneira fácil e eficaz.
Introdução à classe Python Path
O pathlib
é um módulo integrado que permite interagir com o sistema de arquivos de forma mais eficaz. Além disso, pathlib
funciona em sistemas operacionais, incluindo Windows, macOS e Linux.
O pathlib
trata os caminhos como objetos. Então, em vez de usar caminhos como strings, você usa a Path
classe para gerenciar caminhos.
Para usar a Path
classe do pathlib
módulo, importe- a da seguinte maneira:
from pathlib import Path
Linguagem de código: Python ( python )
Obtendo o caminho do diretório inicial
Por Path
ser uma classe, você pode acessar seus métodos e propriedades. Por exemplo, você pode obter o caminho do diretório inicial chamando o home()
método estático assim:
from pathlib import Path
home = Path.home()
print(home)
Linguagem de código: Python ( python )
No Windows, retorna algo como:
C:\Users\root
Linguagem de código: Python ( python )
No Linux, retorna o diretório inicial do usuário atual:
/home/root
Linguagem de código: Python ( python )
…com a suposição de que root
é o usuário do Windows e do Linux.
Obtendo o caminho do diretório de trabalho atual
Da mesma forma, você pode chamar o cwd()
método estático para obter o caminho do diretório de trabalho atual:
from pathlib import Path
cwd = Path.cwd()
print(cwd)
Linguagem de código: Python ( python )
Saída:
D:\demo\pathlib
Linguagem de código: Python ( python )
Criando um objeto Path a partir de uma string
Para criar um Path
objeto, você pode passar uma string assim Path()
:
from pathlib import Path
path = Path('readme.txt')
Linguagem de código: Python ( python )
Obtendo o diretório pai de um caminho
Para obter o primeiro caminho do diretório pai do diretório de trabalho atual acessando a propriedade pai assim:
from pathlib import Path
path = Path('D:/home/root/projects/project_a/tests')
print(path.parent)
Linguagem de código: Python ( python )
Saída:
D:\home\root\projects\project_a
Linguagem de código: Python ( python )
Para obter o caminho do enésimo diretório pai, você pode usar a propriedade parent:
from pathlib import Path
path = Path('D:/home/root/projects/project_a/tests')
print(path.parents[3])
Linguagem de código: Python ( python )
Saída:
D:\home
Linguagem de código: Python ( python )
Unindo caminhos
Para unir caminhos, você usa o /
operador. Por exemplo, para obter o caminho do Downloads
diretório localizado dentro do diretório inicial, você pode usar o /
operador da seguinte maneira:
from pathlib import Path
path = Path.home() / 'Downloads'
print(path)
Linguagem de código: Python ( python )
Saída:
C:\Users\root\Downloads
Linguagem de código: Python ( python )
O /
operador retorna um novo Path
objeto. Portanto, você pode usá-lo diversas vezes em uma expressão. Por exemplo:
from pathlib import Path
path = Path.home() / 'Downloads' / 'Documents'
print(path)
Linguagem de código: Python ( python )
Saída:
C:\Users\root\Downloads\Documents
Linguagem de código: Python ( python )
Verificando se existe um caminho
Um caminho pode ser um arquivo ou um diretório, para verificar se existe um caminho, você pode usar o exists()
método. Por exemplo:
from pathlib import Path
path = Path('readme.txt')
print(path.exists())
Linguagem de código: Python ( python )
O exists()
método retorna True
se o caminho existir ou False
não.
Resolvendo um caminho
Para obter o caminho completo de um Path
objeto, você usa o resolve()
método. Por exemplo:
from pathlib import Path
path = Path('readme.txt')
full_path = path.resolve()
print(full_path)
Linguagem de código: Python ( python )
Saída:
D:\demo\path\readme.txt
Linguagem de código: Python ( python )
Obtendo nome e extensão do arquivo
Para obter o nome do arquivo de um caminho, você usa a name
propriedade:
from pathlib import Path
path = Path('readme.txt')
print(path.name)
Linguagem de código: Python ( python )
Saída:
readme.txt
Linguagem de código: Python ( python )
Para obter o nome do arquivo sem extensão, você usa a stem
propriedade:
from pathlib import Path
path = Path('readme.txt')
print(path.stem)
Linguagem de código: Python ( python )
Saída:
readme
Linguagem de código: Python ( python )
Para obter a extensão do arquivo, você usa a suffix
propriedade:
from pathlib import Path
path = Path('readme.txt')
print(path.suffix)
Linguagem de código: Python ( python )
Saída:
.txt
Linguagem de código: Python ( python )
Verificando se um caminho é arquivo ou diretório
O is_file()
método retorna True
se um caminho for um arquivo ou False
não. Da mesma forma, o is_dir()
retorno retorna True
se um caminho for um diretório ou False
caso contrário.
from pathlib import Path
path = Path('readme.txt')
print(path.is_file()) # True
path = Path.cwd()
print(path.is_dir()) # True
Linguagem de código: Python ( python )
Usando Python Path para interagir com arquivos
O objeto Path permite criar, renomear e excluir arquivos.
Criando um arquivo
Para criar um arquivo, você usa o touch()
método. Por exemplo, o seguinte procedimento cria o readme.md
arquivo no diretório de trabalho atual:
from pathlib import Path
path = Path('notes.md')
path.touch()
Linguagem de código: Python ( python )
Para escrever texto em um arquivo, você usa o write_text()
método:
from pathlib import Path
path = Path('notes.md')
path.touch()
path.write_text('# Path is awesome')
Linguagem de código: Python ( python )
Observe que você também pode criar um arquivo binário e gravar bytes nele usando o write_bytes()
método.
Excluindo um arquivo
Para excluir um arquivo, você usa o unlink()
método:
from pathlib import Path
path = Path('notes.md')
path.unlink()
Linguagem de código: Python ( python )
Se o caminho não existir, o unlink()
método gerará uma FileNotFoundError
exceção. Para evitar isso, você pode usar o missing_ok
argumento:
from pathlib import Path
path = Path('notes.md')
path.unlink(missing_ok=True)
Linguagem de código: Python ( python )
Renomeando um arquivo
Para renomear um arquivo, você usa o rename()
método. O exemplo a seguir cria o notes.md
arquivo, escreve um texto nele e renomeia seu nome para notes.txt
:
from pathlib import Path
# create the notes.md
path = Path('notes.md')
path.touch()
path.write_text('My notes')
# rename nodes.md to notes.txt
path.rename('notes.txt')
Linguagem de código: Python ( python )
Listando arquivos em um diretório
O iterdir()
método itera em um diretório. Ele retorna um gerador que produz os caminhos, incluindo o caminho de um arquivo ou diretório.
Para listar todos os arquivos em um diretório, você pode combinar iterdir()
método com is_file()
método. Por exemplo, o seguinte lista todos os arquivos no diretório de downloads localizado dentro do diretório inicial:
from pathlib import Path
download_path = Path.home() / 'downloads'
for path in download_path.iterdir():
if path.is_file():
print(path)
Linguagem de código: Python ( python )
Se quiser obter um tipo de arquivo específico, você pode usar a propriedade suffix. Por exemplo, o seguinte lista todos os arquivos de texto do diretório de downloads:
from pathlib import Path
download_path = Path.home() / 'downloads'
for path in download_path.iterdir():
if path.is_file() and path.suffix == '.txt':
print(path)
Linguagem de código: Python ( python )
Ou de uma forma mais pitônica usando uma compreensão de lista:
from pathlib import Path
download_path = Path.home() / 'downloads'
file_paths = [path for path in download_path.iterdir()
if path.is_file() and path.suffix == '.txt']
print(file_paths)
Linguagem de código: Python ( python )
Usando Python Path para interagir com diretórios
Assim como os arquivos, o Caminho também permite criar, renomear e remover diretórios.
Criando um diretório
Para criar um diretório, você usa o mkdir()
método. O exemplo a seguir cria um diretório de teste no diretório de trabalho atual:
from pathlib import Path
path = Path('test')
path.mkdir()
Linguagem de código: Python ( python )
Se o diretório de teste existir, o mkdir()
método gerará a FileExistsError
exceção. Para evitar a exceção caso o diretório já exista, você pode usar o exist_ok
argumento:
from pathlib import Path
path = Path('test')
path.mkdir(exist_ok=True)
Linguagem de código: Python ( python )
Renomeando um diretório
Para renomear um diretório, você usa o rename()
método. Por exemplo, o seguinte renomeia o diretório test para testes (com adicional s
):
from pathlib import Path
path = Path('test')
path.rename('tests')
Linguagem de código: Python ( python )
Excluindo um diretório
Para excluir um diretório, você usa o rmdir()
método. Observe que o diretório deve estar vazio:
from pathlib import Path
path = Path('tests')
path.rmdir()
Linguagem de código: Python ( python )
Se o diretório não existir, o
método gerará uma rmdir()
FileNotFoundErorr
exceção. Para evitar isso, você pode verificar se o diretório existe antes de chamar o
método:rmdir()
from pathlib import Path
path = Path('tests')
if path.exists():
path.rmdir()
Linguagem de código: Python ( python )
Listando subdiretórios
Para listar todos os subdiretórios de um caminho, você usa os métodos iterdir()
e is_dir()
. Por exemplo, a seguir lista todos os subdiretórios do caminho de downloads:
from pathlib import Path
download_path = Path.home() / 'downloads'
for path in download_path.iterdir():
if path.is_dir():
print(path)
Linguagem de código: Python ( python )
Ou de uma forma mais pitônica usando uma compreensão de lista:
from pathlib import Path
download_path = Path.home() / 'downloads'
paths = [path for path in download_path.iterdir() if path.is_dir()]
print(paths)
Linguagem de código: Python ( python )
Resumo
Descrição | Métodos/Propriedades |
---|---|
Crie um novo objeto Path a partir de uma string | Path('path/to/file/or/directory/') |
Junte caminhos usando o / operador |
path = path1 / path2 / 'my_dir' / 'my_file.txt' |
Obtenha o caminho do diretório inicial |
|
Obtenha o caminho do diretório de trabalho atual |
|
Obtenha o primeiro diretório pai de um caminho | path.parent |
Obtenha o enésimo diretório pai de um caminho | path.parents[n] |
Retorna True se um caminho for um arquivo |
|
Retorna True se um caminho for um diretório |
|
Retorna True se existir um caminho |
|
Crie um arquivo |
|
Escrever texto em um arquivo | path.write_text(contents) |
Gravar bytes em um arquivo | path.write_bytes(bytes) |
Renomear um arquivo ou diretório | path.rename(target) |
Excluir um arquivo |
|
Crie um diretório |
|
Remover um diretório |
|
Listar arquivos e/ou diretórios |
|