Caminho Python

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, pathlibfunciona em sistemas operacionais, incluindo Windows, macOS e Linux.

O pathlibtrata os caminhos como objetos. Então, em vez de usar caminhos como strings, você usa a Pathclasse para gerenciar caminhos.

Para usar a Pathclasse do pathlibmódulo, importe- a da seguinte maneira:

from pathlib import PathLinguagem de código:  Python  ( python )

Obtendo o caminho do diretório inicial

Por Pathser 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\rootLinguagem de código:  Python  ( python )

No Linux, retorna o diretório inicial do usuário atual:

/home/rootLinguagem 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\pathlibLinguagem de código:  Python  ( python )

Criando um objeto Path a partir de uma string

Para criar um Pathobjeto, 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_aLinguagem 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:\homeLinguagem de código:  Python  ( python )

Unindo caminhos

Para unir caminhos, você usa o /operador. Por exemplo, para obter o caminho do Downloadsdiretó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\DownloadsLinguagem de código:  Python  ( python )

O /operador retorna um novo Pathobjeto. 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\DocumentsLinguagem 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 Truese o caminho existir ou Falsenão.

Resolvendo um caminho

Para obter o caminho completo de um Pathobjeto, 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.txtLinguagem de código:  Python  ( python )

Obtendo nome e extensão do arquivo

Para obter o nome do arquivo de um caminho, você usa a namepropriedade:

from pathlib import Path

path = Path('readme.txt')
print(path.name)Linguagem de código:  Python  ( python )

Saída:

readme.txtLinguagem de código:  Python  ( python )

Para obter o nome do arquivo sem extensão, você usa a stempropriedade:

from pathlib import Path

path = Path('readme.txt')

print(path.stem)Linguagem de código:  Python  ( python )

Saída:

readmeLinguagem de código:  Python  ( python )

Para obter a extensão do arquivo, você usa a suffixpropriedade:

from pathlib import Path

path = Path('readme.txt')
print(path.suffix)Linguagem de código:  Python  ( python )

Saída:

.txtLinguagem de código:  Python  ( python )

Verificando se um caminho é arquivo ou diretório

O is_file()método retorna Truese um caminho for um arquivo ou Falsenão. Da mesma forma, o is_dir()retorno retorna Truese um caminho for um diretório ou Falsecaso contrário.

from pathlib import Path


path = Path('readme.txt')
print(path.is_file())  # True

path = Path.cwd()
print(path.is_dir())  # TrueLinguagem 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.mdarquivo 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 FileNotFoundErrorexceção. Para evitar isso, você pode usar o missing_okargumento:

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.mdarquivo, 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 FileExistsErrorexceção. Para evitar a exceção caso o diretório já exista, você pode usar o exist_okargumento:

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 rmdir()método gerará uma FileNotFoundErorrexceção. Para evitar isso, você pode verificar se o diretório existe antes de chamar o rmdir()método:

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 Path.home()
Obtenha o caminho do diretório de trabalho atual Path.cwd()
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 path.is_file()
Retorna True se um caminho for um diretório path.is_dir()
Retorna True se existir um caminho path.exists()
Crie um arquivo path.touch()
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 path.unlink()
Crie um diretório path.mkdir()
Remover um diretório path.rmdir()
Listar arquivos e/ou diretórios path.iterdir()

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *