Um guia abrangente para usar pathlib em Python para manipulação do sistema de arquivos
Descubra as vantagens do Python pathlib em relação ao módulo os, explorando objetos de caminho, componentes de caminho e operações de caminho comuns para interação com o sistema de arquivos.
Até recentemente, a manipulação do sistema de arquivos em Python era notoriamente difícil. Os desenvolvedores frequentemente enfrentavam dificuldades com caminhos de arquivos incorretos, que eram propensos a erros porque exigiam longas cadeias de caracteres como entradas. Além disso, os desenvolvedores relataram que seu código quebrava com frequência devido a inconsistências em diferentes sistemas operacionais.
Felizmente, na versão 3.4 do Python, os desenvolvedores introduziram o módulo pathlib na biblioteca padrão. O pathlib oferece uma solução elegante para lidar com os caminhos do sistema de arquivos usando uma abordagem orientada a objetos há muito esperada e também garante um comportamento independente de plataforma.
Este tutorial abrangente ensinará a você os recursos do módulo pathlib para dar suporte às suas interações diárias com o sistema de arquivos. Usando o pathlib, você se beneficiará de fluxos de trabalho eficientes e da fácil recuperação de dados. O pathlib amadureceu significativamente ao longo dos anos, e nós nos mantivemos atualizados para que você não precise fazer isso. Vamos começar.
Módulo Python os vs. pathlib
Antes do Python 3.4, a maneira mais tradicional de lidar com caminhos de arquivos era usar o módulo os. Embora o módulo os já tenha sido altamente eficaz, ele começou a mostrar sua idade.
Podemos mostrar o valor exclusivo do pathlib considerando uma tarefa comum na ciência de dados: como encontrar todos os arquivos png em um determinado diretório e em todos os seus subdiretórios.
Se estivéssemos usando o módulo os, poderíamos escrever o seguinte código:
import os
dir_path ="/home/user/documents"
files =[
os.path.join(dir_path, f)for f in os.listdir(dir_path)if os.path.isfile(os.path.join(dir_path, f)) and f.endswith(".png")]Tecnologia
Embora esse código resolva a tarefa imediata de encontrar nossos arquivos png, ele revela várias desvantagens importantes do módulo os. Por um lado, o código é longo e quase ilegível, o que é uma pena, considerando que essa é uma operação relativamente simples. Como segundo ponto, nosso código pressupõe o conhecimento de compreensões de lista, o que não deve ser considerado como certo. Como terceiro ponto, o código envolve operações com strings, que são propensas a erros. E, além de tudo isso, o código não é muito conciso.
Se, em vez disso, estivéssemos usando o módulo pathlib, nosso código seria muito mais simples. Como mencionamos, o site pathlib oferece uma abordagem orientada a objetos para lidar com os caminhos do sistema de arquivos. Dê uma olhada:
from pathlib import Path
# Create a path object
dir_path = Path(dir_path)# Find all text files inside a directory
files =list(dir_path.glob("*.png"))Tecnologia
Essa programação orientada a objetos organiza o código em torno de objetos e suas interações, o que resulta em um código mais modular, reutilizável e de fácil manutenção. Se você não está familiarizado com a programação orientada a objetos, vale a pena aprender com nossocursoObject-Oriented Python Programming.
Trabalhando com objetos de caminho em Python
A biblioteca pathlib gira em torno dos chamados objetos Path, que representam os caminhos do sistema de arquivos de forma estruturada e independente de plataforma.
No início deste tutorial, trouxemos a classe Path do módulo pathlib para o nosso namespace atual usando a seguinte linha de código:
Depois de chamar a classe Path em pathlib, podemos criar objetos Path de várias maneiras, inclusive a partir de cadeias de caracteres, de outros objetos Path, do diretório de trabalho atual e do diretório inicial.
Vamos dar uma olhada em cada uma delas.
Criando objetos de caminho a partir de strings
Podemos criar um objeto Path passando uma string que representa um caminho do sistema de arquivos para uma variável. Isso converte a representação de string do caminho do arquivo em um objeto Path.
Criando objetos de caminho a partir de outros objetos de caminho
Os objetos existentes no site Path podem servir como blocos de construção para a criação de novos caminhos.
Fazemos isso combinando um caminho base, um diretório de dados e um nome de arquivo em um único caminho de arquivo. Devemos nos lembrar de usar uma barra sempre que apropriado para estender nossos objetos Path.
Criar objetos de caminho a partir do diretório de trabalho atual
Aqui, atribuímos o diretório de trabalho atual à variável cwd usando o método Path.cwd(). Em seguida, podemos recuperar o caminho do diretório de trabalho atual onde o nosso script está sendo executado.
Criando objetos de caminho a partir do diretório de trabalho inicial
Podemos construir um caminho combinando nosso diretório pessoal com subdiretórios adicionais. Aqui estamos combinando nosso diretório pessoal com os subdiretórios "downloads" e "projetos".
home = Path.home()
home /"downloads"/"projects"Tecnologia
Uma observação importante: A classe Path em si não executa nenhuma operação do sistema de arquivos, como validação de caminho, criação de diretórios ou arquivos. Ele foi projetado para representar e manipular caminhos. Para interagir de fato com o sistema de arquivos (verificar a existência, ler/gravar arquivos), teremos de usar métodos especiais dos objetos Path e, em alguns casos avançados, obter ajuda do módulo os.
Trabalhando com componentes de caminho em Python
Os atributos de caminho de arquivo são várias propriedades e componentes de um caminho de arquivo que ajudam a identificar e gerenciar arquivos e diretórios em um sistema de arquivos. Assim como um endereço físico tem diferentes partes, como número da rua, cidade, país e código postal, um caminho de sistema de arquivos pode ser dividido em componentes menores. O site pathlib nos permite acessar e manipular esses componentes usando atributos de caminho por meio da notação de ponto.
Trabalhando com o diretório raiz
A raiz é o diretório mais alto em um sistema de arquivos. Em sistemas do tipo Unix, ele é representado por uma barra (/). No Windows, normalmente é uma letra de unidade seguida de dois pontos, como C:.
image_file = home /"downloads"/"midjourney.png"
image_file.rootTecnologia
O atributo suffix retorna a extensão do arquivo, incluindo o ponto, como uma cadeia de caracteres (ou uma cadeia de caracteres vazia se não houver nenhuma extensão).
Observação: Em um Mac, os caminhos de arquivo diferenciam maiúsculas de minúsculas, portanto, /Users/username/Documents e /users/username/documents seriam diferentes.
O atributo pathlib parts
Podemos usar o atributo .parts para dividir um objeto Path em seus componentes.
Path têm muitos métodos que permitem que você interaja de forma eficiente com os diretórios e seus conteúdos. Vamos dar uma olhada em como realizar algumas das operações mais comuns.
Diretórios de listagem
O método iterdir() permite que você itere sobre todos os arquivos e subdiretórios em uma pasta. É particularmente útil para processar todos os arquivos em um diretório ou executar operações em cada entrada.
Como os objetos Path representam apenas caminhos, às vezes você precisa verificar se um caminho existe usando o método .exists():
O método .exists() verifica se um caminho existe. Isso é útil porque os objetos Path podem representar arquivos e diretórios que podem ou não estar realmente presentes no sistema de arquivos.
pathlib também oferece funcionalidades para criar e excluir arquivos e diretórios. Vamos ver como.
O método mkdir()
O método mkdir() cria um novo diretório no caminho especificado. Por padrão, ele cria o diretório no diretório de trabalho atual.
from pathlib import Path
data_dir = Path("new_data_dir")# Create the directory 'new_data_dir' in the current working directory
data_dir.mkdir()Tecnologia
O método mkdir(parents=True)
O método mkdir(parents=True) é particularmente útil quando você deseja criar uma estrutura de diretórios em que alguns diretórios pai podem não existir. A configuração de parents=True garante que todos os diretórios pai necessários sejam criados ao longo do caminho.
sub_dir = Path("data/nested/subdirectory")# Create 'data/nested/subdirectory', even if 'data' or 'nested' don't exist
sub_dir.mkdir(parents=True)Tecnologia
Lembre-se de que o site mkdir() gera uma exceção se já existir um diretório com o mesmo nome.
O método unlink() exclui permanentemente um arquivo representado pelo objeto Path. Recomenda-se que você verifique se um arquivo existe antes de executar esse método para evitar receber um erro.
O método rmdir() remove um diretório vazio. Lembre-se de que o rmdir() só funciona para remover diretórios vazios. A maneira mais fácil de excluir um diretório não vazio é usar a biblioteca shutil ou o terminal.
Observação: Tenha cuidado ao usar unlink() ou rmdir(), pois os resultados são permanentes.
Manipulação avançada de caminhos
Vamos passar para alguns conceitos avançados de manipulação de caminhos e como aplicá-los na prática usando o site pathlib.
Caminhos relativos vs. absolutos
Começaremos entendendo as diferenças entre caminhos absolutos e relativos, pois eles aparecem com frequência.
Caminhos relativos
Os caminhos relativos especificam o local de um arquivo ou diretório em relação ao diretório atual, daí a palavra relativo. Eles são curtos e flexíveis em seu projeto, mas podem ser confusos se você mudar o diretório de trabalho.
Por exemplo, tenho uma pasta de imagens em meu diretório de trabalho atual, que tem o arquivo midjourney.png.
O código acima funciona agora, mas se eu mover o notebook que estou usando para um local diferente, o snippet será interrompido porque a pasta de imagens não foi movida com o notebook.
Caminhos absolutos
Os caminhos absolutos especificam o local completo de um arquivo ou diretório a partir da raiz do sistema de arquivos. Eles são independentes do diretório atual e oferecem um ponto de referência claro para qualquer usuário em qualquer lugar do sistema.
Como você pode ver, os caminhos absolutos podem ser bem longos, especialmente em projetos complexos com estruturas de árvore aninhadas. Por esse motivo, a maioria das pessoas prefere caminhos relativos, que são mais curtos.
Método de resolução
pathlib fornece métodos para converter caminhos relativos em absolutos com o método resolve().
Você também pode fazer o caminho inverso: Se tivermos um caminho absoluto, podemos convertê-lo em um caminho relativo com base em um diretório de referência.
Para ilustrar o globbing, podemos voltar ao exemplo que apresentamos no início do artigo, em que escrevemos um código para localizar todos os arquivos png em um determinado diretório.
pathlib usa o módulo .glob() incorporado para pesquisar com eficiência os arquivos que correspondem a um padrão específico em qualquer diretório. Esse módulo é muito útil ao processar arquivos com nomes ou extensões semelhantes.
O método glob funciona aceitando uma string de padrão contendo curingas como entrada e retorna um objeto gerador que produz objetos Path correspondentes sob demanda:
*: Corresponde a zero ou mais caracteres.
?: Corresponde a qualquer caractere único.
[]: Corresponde a um intervalo de caracteres entre colchetes (por exemplo, [a-z] corresponde a qualquer letra minúscula).
Para ilustrar, vamos tentar localizar todos os notebooks Jupyter em meu diretório de artigos.
articles_dir = Path.home()/"articles"# Find all scripts
notebooks = articles_dir.glob("*.ipynb")# Print how many foundprint(len(list(notebooks)))Tecnologia
O método .glob() não encontrou nenhum notebook, o que, à primeira vista, parece surpreendente, pois escrevi mais de 150 artigos. O motivo é que o .glob() só pesquisa dentro do diretório fornecido, não em seus subdiretórios.
Podemos resolver isso fazendo uma pesquisa recursiva, para a qual precisamos usar o método rglob(), que tem sintaxe semelhante:
Dessa vez, nosso código encontrou todos os 357 arquivos.
Trabalhar com arquivos
Como vimos, os objetos Path representam apenas arquivos, mas não executam operações neles. No entanto, eles têm determinados métodos para operações comuns de arquivos. Veremos como usá-los nesta seção.
Leitura de arquivos
A leitura do conteúdo dos arquivos é uma operação fundamental em muitos aplicativos Python. O site pathlib oferece métodos abreviados convenientes para a leitura de arquivos como texto ou bytes brutos.
O método read_text() nos permite ler o conteúdo de um arquivo de texto e fechar o arquivo.
Como você pode ver, o método write_text() substitui o texto. Embora não haja modo de acréscimo para write_text(), podemos usar read_text() e write_text() juntos para acrescentar texto ao final do arquivo.
old_text =file.read_text()+"\n"
final_text ="This is the final text."# Combine old and new texts and write them backfile.write_text(old_text + final_text)print(file.read_text())Tecnologia
This is new text.
This is the final text.Tecnologia
write_bytes() funciona de maneira semelhante. Para ilustrar, vamos primeiro duplicar a imagem midjourney.png com um novo nome.
O método with_stem() retorna um caminho de arquivo com um nome de arquivo diferente (embora o sufixo permaneça o mesmo). Isso nos permite ler uma imagem original e gravar seu contexto em uma nova imagem.
rename() aceita um caminho de destino, que pode ser uma cadeia de caracteres ou outro objeto de caminho.
Para mover arquivos, você pode usar a função replace(), que também aceita um caminho de destino:
# Define the file to be moved
source_file = Path("new_file.txt")# Define the location to put the file
destination = Path("data/new/location")# Create the directories if they don't exist
destination.mkdir(parents=True)# Move the file
source_file.replace(destination / source_file.name)Tecnologia
Quando você precisa reservar um nome de arquivo para uso posterior, mas não tem nenhum conteúdo para gravar nele no momento, podemos usar o touch para criar um espaço em branco. O método foi inspirado no comando de terminal touch do Unix.
Permissões e informações do sistema de arquivos
Como item final, aprenderemos a acessar as características do arquivo usando o método .stat(). Se você estiver familiarizado com os, perceberá que esse novo método tem o mesmo resultado que os.stat().
A introdução do módulo pathlib no Python 3.4 simplificou significativamente a manipulação do sistema de arquivos para os desenvolvedores. Ao oferecer uma abordagem orientada a objetos para lidar com caminhos de arquivos, o pathlib oferece uma maneira estruturada e direta de representar os caminhos do sistema de arquivos. O pathlib também oferece independência de plataforma, o que significa que o pathlib lida com separadores de caminho de forma consistente em diferentes sistemas operacionais para que nosso código não seja interrompido em um novo computador. Por fim, o pathlib oferece um vasto conjunto de métodos concisos e expressivos para operações comuns do sistema de arquivos, como vimos.
Explore o Polars, uma biblioteca Python robusta para manipulação e análise de dados de alto desempenho. Saiba mais sobre seus recursos, suas vantagens em relação ao pandas e como ele pode revolucionar seus processos de análise de dados.
Em Python, tudo é objeto. Números, cadeias de caracteres (strings), DataFrames, e até mesmo funções são objetos. Especificamente, qualquer coisa que você usa no Python tem uma classe, um modelo associado por trás.
Este tutorial demonstra como usar o Matplotlib, uma poderosa biblioteca de visualização de dados em Python, para criar gráficos de linha, barra e dispersão com dados do mercado de ações.
Aumente o nível de suas habilidades de programação. Você aprenderá a otimizar o código, escrever funções e testes e usar as melhores práticas de engenharia de software.
Até recentemente, a manipulação do sistema de arquivos em Python era notoriamente difícil. Os desenvolvedores frequentemente enfrentavam dificuldades com caminhos de arquivos incorretos, que eram propensos a erros porque exigiam longas cadeias de caracteres como entradas. Além disso, os desenvolvedores relataram que seu código quebrava com frequência devido a inconsistências em diferentes sistemas operacionais.
Felizmente, na versão 3.4 do Python, os desenvolvedores introduziram o módulo
pathlibna biblioteca padrão. Opathliboferece uma solução elegante para lidar com os caminhos do sistema de arquivos usando uma abordagem orientada a objetos há muito esperada e também garante um comportamento independente de plataforma.Este tutorial abrangente ensinará a você os recursos do módulo
pathlibpara dar suporte às suas interações diárias com o sistema de arquivos. Usando opathlib, você se beneficiará de fluxos de trabalho eficientes e da fácil recuperação de dados. Opathlibamadureceu significativamente ao longo dos anos, e nós nos mantivemos atualizados para que você não precise fazer isso. Vamos começar.Módulo Python os vs. pathlib
Antes do Python 3.4, a maneira mais tradicional de lidar com caminhos de arquivos era usar o módulo
os. Embora o móduloosjá tenha sido altamente eficaz, ele começou a mostrar sua idade.Podemos mostrar o valor exclusivo do
pathlibconsiderando uma tarefa comum na ciência de dados: como encontrar todos os arquivospngem um determinado diretório e em todos os seus subdiretórios.Se estivéssemos usando o módulo
os, poderíamos escrever o seguinte código:Embora esse código resolva a tarefa imediata de encontrar nossos arquivos
png, ele revela várias desvantagens importantes do móduloos. Por um lado, o código é longo e quase ilegível, o que é uma pena, considerando que essa é uma operação relativamente simples. Como segundo ponto, nosso código pressupõe o conhecimento de compreensões de lista, o que não deve ser considerado como certo. Como terceiro ponto, o código envolve operações com strings, que são propensas a erros. E, além de tudo isso, o código não é muito conciso.Se, em vez disso, estivéssemos usando o módulo pathlib, nosso código seria muito mais simples. Como mencionamos, o site
pathliboferece uma abordagem orientada a objetos para lidar com os caminhos do sistema de arquivos. Dê uma olhada:Essa programação orientada a objetos organiza o código em torno de objetos e suas interações, o que resulta em um código mais modular, reutilizável e de fácil manutenção. Se você não está familiarizado com a programação orientada a objetos, vale a pena aprender com nossocurso Object-Oriented Python Programming.
Trabalhando com objetos de caminho em Python
A biblioteca
pathlibgira em torno dos chamados objetosPath, que representam os caminhos do sistema de arquivos de forma estruturada e independente de plataforma.No início deste tutorial, trouxemos a classe
Pathdo módulopathlibpara o nosso namespace atual usando a seguinte linha de código:Depois de chamar a classe
Pathempathlib, podemos criar objetosPathde várias maneiras, inclusive a partir de cadeias de caracteres, de outros objetosPath, do diretório de trabalho atual e do diretório inicial.Vamos dar uma olhada em cada uma delas.
Criando objetos de caminho a partir de strings
Podemos criar um objeto
Pathpassando uma string que representa um caminho do sistema de arquivos para uma variável. Isso converte a representação de string do caminho do arquivo em um objetoPath.Criando objetos de caminho a partir de outros objetos de caminho
Os objetos existentes no site
Pathpodem servir como blocos de construção para a criação de novos caminhos.Fazemos isso combinando um caminho base, um diretório de dados e um nome de arquivo em um único caminho de arquivo. Devemos nos lembrar de usar uma barra sempre que apropriado para estender nossos objetos
Path.Criar objetos de caminho a partir do diretório de trabalho atual
Aqui, atribuímos o diretório de trabalho atual à variável
cwdusando o métodoPath.cwd(). Em seguida, podemos recuperar o caminho do diretório de trabalho atual onde o nosso script está sendo executado.Criando objetos de caminho a partir do diretório de trabalho inicial
Podemos construir um caminho combinando nosso diretório pessoal com subdiretórios adicionais. Aqui estamos combinando nosso diretório pessoal com os subdiretórios "downloads" e "projetos".
Uma observação importante: A classe
Pathem si não executa nenhuma operação do sistema de arquivos, como validação de caminho, criação de diretórios ou arquivos. Ele foi projetado para representar e manipular caminhos. Para interagir de fato com o sistema de arquivos (verificar a existência, ler/gravar arquivos), teremos de usar métodos especiais dos objetosPathe, em alguns casos avançados, obter ajuda do móduloos.Trabalhando com componentes de caminho em Python
Os atributos de caminho de arquivo são várias propriedades e componentes de um caminho de arquivo que ajudam a identificar e gerenciar arquivos e diretórios em um sistema de arquivos. Assim como um endereço físico tem diferentes partes, como número da rua, cidade, país e código postal, um caminho de sistema de arquivos pode ser dividido em componentes menores. O site
pathlibnos permite acessar e manipular esses componentes usando atributos de caminho por meio da notação de ponto.Trabalhando com o diretório raiz
A raiz é o diretório mais alto em um sistema de arquivos. Em sistemas do tipo Unix, ele é representado por uma barra (
/). No Windows, normalmente é uma letra de unidade seguida de dois pontos, comoC:.Trabalhando com o diretório pai
O pai contém o arquivo ou diretório atual. Ele está um nível acima em relação ao diretório ou arquivo atual.
Trabalhando com o nome do arquivo
Esse atributo retorna o nome completo do arquivo, inclusive a extensão, como uma cadeia de caracteres.
Trabalhando com o sufixo do arquivo
O atributo suffix retorna a extensão do arquivo, incluindo o ponto, como uma cadeia de caracteres (ou uma cadeia de caracteres vazia se não houver nenhuma extensão).
Trabalhando com a haste do arquivo
A haste retorna o nome do arquivo sem a extensão. Trabalhar com a haste pode ser útil ao converter arquivos em diferentes formatos.
Observação: Em um Mac, os caminhos de arquivo diferenciam maiúsculas de minúsculas, portanto,
/Users/username/Documentse/users/username/documentsseriam diferentes.O atributo pathlib parts
Podemos usar o atributo
.partspara dividir um objetoPathem seus componentes.O atributo pathlib parents
O atributo
parents, que retorna um gerador, transforma esses componentes em objetosPath.Operações comuns de caminho usando pathlib
Pathtêm muitos métodos que permitem que você interaja de forma eficiente com os diretórios e seus conteúdos. Vamos dar uma olhada em como realizar algumas das operações mais comuns.Diretórios de listagem
O método
iterdir()permite que você itere sobre todos os arquivos e subdiretórios em uma pasta. É particularmente útil para processar todos os arquivos em um diretório ou executar operações em cada entrada.Como
iterdir()retorna um iterador, as entradas são recuperadas sob demanda à medida que você percorre o loop.O método is_dir()
O método
is_dir()retornaTruese o caminho apontar para um diretório eFalsecaso contrário.O método is_file()
O método
.is_file()retornaTruese o caminho apontar para um arquivo eFalsecaso contrário.O método exists()
Como os objetos
Pathrepresentam apenas caminhos, às vezes você precisa verificar se um caminho existe usando o método.exists():O método .exists() verifica se um caminho existe. Isso é útil porque os objetos
Pathpodem representar arquivos e diretórios que podem ou não estar realmente presentes no sistema de arquivos.Criação e exclusão de caminhos
pathlibtambém oferece funcionalidades para criar e excluir arquivos e diretórios. Vamos ver como.O método mkdir()
O método
mkdir()cria um novo diretório no caminho especificado. Por padrão, ele cria o diretório no diretório de trabalho atual.O método mkdir(parents=True)
O método
mkdir(parents=True)é particularmente útil quando você deseja criar uma estrutura de diretórios em que alguns diretórios pai podem não existir. A configuração deparents=Truegarante que todos os diretórios pai necessários sejam criados ao longo do caminho.Lembre-se de que o site
mkdir()gera uma exceção se já existir um diretório com o mesmo nome.O método unlink()
O método
unlink()exclui permanentemente um arquivo representado pelo objetoPath. Recomenda-se que você verifique se um arquivo existe antes de executar esse método para evitar receber um erro.O método rmdir()
O método
rmdir()remove um diretório vazio. Lembre-se de que ormdir()só funciona para remover diretórios vazios. A maneira mais fácil de excluir um diretório não vazio é usar a biblioteca shutil ou o terminal.Observação: Tenha cuidado ao usar
unlink()ourmdir(), pois os resultados são permanentes.Manipulação avançada de caminhos
Vamos passar para alguns conceitos avançados de manipulação de caminhos e como aplicá-los na prática usando o site
pathlib.Caminhos relativos vs. absolutos
Começaremos entendendo as diferenças entre caminhos absolutos e relativos, pois eles aparecem com frequência.
Caminhos relativos
Os caminhos relativos especificam o local de um arquivo ou diretório em relação ao diretório atual, daí a palavra relativo. Eles são curtos e flexíveis em seu projeto, mas podem ser confusos se você mudar o diretório de trabalho.
Por exemplo, tenho uma pasta de imagens em meu diretório de trabalho atual, que tem o arquivo
midjourney.png.O código acima funciona agora, mas se eu mover o notebook que estou usando para um local diferente, o snippet será interrompido porque a pasta de imagens não foi movida com o notebook.
Caminhos absolutos
Os caminhos absolutos especificam o local completo de um arquivo ou diretório a partir da raiz do sistema de arquivos. Eles são independentes do diretório atual e oferecem um ponto de referência claro para qualquer usuário em qualquer lugar do sistema.
Como você pode ver, os caminhos absolutos podem ser bem longos, especialmente em projetos complexos com estruturas de árvore aninhadas. Por esse motivo, a maioria das pessoas prefere caminhos relativos, que são mais curtos.
Método de resolução
pathlibfornece métodos para converter caminhos relativos em absolutos com o métodoresolve().Você também pode fazer o caminho inverso: Se tivermos um caminho absoluto, podemos convertê-lo em um caminho relativo com base em um diretório de referência.
Globbing
Para ilustrar o globbing, podemos voltar ao exemplo que apresentamos no início do artigo, em que escrevemos um código para localizar todos os arquivos
pngem um determinado diretório.pathlibusa o módulo.glob()incorporado para pesquisar com eficiência os arquivos que correspondem a um padrão específico em qualquer diretório. Esse módulo é muito útil ao processar arquivos com nomes ou extensões semelhantes.O método glob funciona aceitando uma string de padrão contendo curingas como entrada e retorna um objeto gerador que produz objetos
Pathcorrespondentes sob demanda:*: Corresponde a zero ou mais caracteres.?: Corresponde a qualquer caractere único.[]: Corresponde a um intervalo de caracteres entre colchetes (por exemplo, [a-z] corresponde a qualquer letra minúscula).Para ilustrar, vamos tentar localizar todos os notebooks Jupyter em meu diretório de artigos.
O método
.glob()não encontrou nenhum notebook, o que, à primeira vista, parece surpreendente, pois escrevi mais de 150 artigos. O motivo é que o.glob()só pesquisa dentro do diretório fornecido, não em seus subdiretórios.Podemos resolver isso fazendo uma pesquisa recursiva, para a qual precisamos usar o método
rglob(), que tem sintaxe semelhante:Dessa vez, nosso código encontrou todos os 357 arquivos.
Trabalhar com arquivos
Como vimos, os objetos
Pathrepresentam apenas arquivos, mas não executam operações neles. No entanto, eles têm determinados métodos para operações comuns de arquivos. Veremos como usá-los nesta seção.Leitura de arquivos
A leitura do conteúdo dos arquivos é uma operação fundamental em muitos aplicativos Python. O site
pathliboferece métodos abreviados convenientes para a leitura de arquivos como texto ou bytes brutos.O método
read_text()nos permite ler o conteúdo de um arquivo de texto e fechar o arquivo.No caso de arquivos binários, você pode usar o método
read_bytes().Lembre-se de que, ao usar um método
read_*, o tratamento de erros é importante:Gravação de arquivos
Escrever em arquivos é tão fácil quanto ler arquivos. Para gravar arquivos, temos o método
write_text().Como você pode ver, o método
write_text()substitui o texto. Embora não haja modo de acréscimo parawrite_text(), podemos usarread_text()ewrite_text()juntos para acrescentar texto ao final do arquivo.write_bytes()funciona de maneira semelhante. Para ilustrar, vamos primeiro duplicar a imagemmidjourney.pngcom um novo nome.O método
with_stem()retorna um caminho de arquivo com um nome de arquivo diferente (embora o sufixo permaneça o mesmo). Isso nos permite ler uma imagem original e gravar seu contexto em uma nova imagem.Renomear e mover arquivos
Além da função
with_stem()para renomear a haste de um arquivo, o sitepathliboferece o métodorename()para você renomear de forma mais completa.rename()aceita um caminho de destino, que pode ser uma cadeia de caracteres ou outro objeto de caminho.Para mover arquivos, você pode usar a função
replace(), que também aceita um caminho de destino:Criação de arquivos em branco
pathlibnos permite criar arquivos em branco usando o métodotouch:O método
touchfoi originalmente criado para atualizar o tempo de modificação de um arquivo, portanto, também pode ser usado em arquivos existentes.Quando você precisa reservar um nome de arquivo para uso posterior, mas não tem nenhum conteúdo para gravar nele no momento, podemos usar o touch para criar um espaço em branco. O método foi inspirado no comando de terminal touch do Unix.
Permissões e informações do sistema de arquivos
Como item final, aprenderemos a acessar as características do arquivo usando o método
.stat(). Se você estiver familiarizado comos, perceberá que esse novo método tem o mesmo resultado queos.stat().Também podemos recuperar o tamanho do arquivo usando a notação de pontos.
Conclusão
A introdução do módulo
pathlibno Python 3.4 simplificou significativamente a manipulação do sistema de arquivos para os desenvolvedores. Ao oferecer uma abordagem orientada a objetos para lidar com caminhos de arquivos, opathliboferece uma maneira estruturada e direta de representar os caminhos do sistema de arquivos. Opathlibtambém oferece independência de plataforma, o que significa que opathliblida com separadores de caminho de forma consistente em diferentes sistemas operacionais para que nosso código não seja interrompido em um novo computador. Por fim, opathliboferece um vasto conjunto de métodos concisos e expressivos para operações comuns do sistema de arquivos, como vimos.Lembre-se de que
pathlibrepresenta uma das muitas bibliotecas integradas poderosas do Python. Ao fazer os nossos cursos Data Scientist With Python Career Track, Python Programming Skill Track e Intro to Python for Data Science, você dominará um amplo conjunto de bibliotecas integradas para se tornar um programador Python forte.Obrigado a você por ler!