O módulo pathlib
está aí desde a versão 3.4 do Python mas confesso que comecei a usar mesmo há pouco tempo. Pra quem tá ouvindo esse nome agora, o pathlib
é Object-oriented filesystem paths ou um módulo com várias classes para te ajudar a manipular caminhos de maneira mais prática. Cada classe tem um uso apropriado e se você quiser se aprofundar nelas, sugiro dar uma olhadinha na documentação. Esse post é bem introdutório (e ao mesmo tempo um lembrete da sintaxe pra mim mesma :)).
Para começar, importe:
from pathlib import Path
Se quiser criar uma nova instância de Path
, basta apenas passar o caminho:
>>> Path('/home/ana')
PosixPath('/home/ana')
Nesse caso retorna uma PosixPath
, que representa sistemas de arquivo não-Windows. Se for Windows, vai retornar uma WindowsPath
. Ambas implementam caminhos concretos (ou seja, o caminho para o diretório - apesar do nome diferentão).
E para concatenar, ficou bem melhor:
>>> myfile = Path.home() / 'myfile.txt'
>>> myfile
PosixPath('/Users/ana.gomes/myfile.txt')
Basta usar as barras!
Com uma instância de Path
, é possível ter acesso a vários métodos bem legais, como:
Path.cwd()
Path.is_dir()
Path.is_file()
Path.exists()
Path.samefile()
Path.owner()
Path.home()
Path.parts() # se quiser ir por partes ¯\_(ツ)_/¯
Se você quiser saber a extensão pode usar suffix
ou suffixes
(para uma lista delas).
Outra coisa bacana, é saber qual é o caminho relativo a partir de um outro diretório. Por exemplo:
>>> myfile = Path.home() / 'myfile.txt'
>>> myfile
PosixPath('/Users/ana.gomes/myfile.txt')
>>> myfile.relative_to('/Users/')
PosixPath('ana.gomes/myfile.txt')
E, por fim, não pode faltar como listar os diretórios e caminhar entre eles. Pra listar, temos o glob
:
>>> list((Path.home() / 'Documents').glob('**/*.*'))
[PosixPath('/Users/ana.gomes/Documents/.localized'), PosixPath('/Users/ana.gomes/Documents/myfile.txt')]
Utilizando o **
, ele irá caminhar recursivamente.
E para iterar, o iterdir
.
>>> list((Path.home() / 'personal-workspace').iterdir())
[PosixPath('/Users/ana.gomes/personal-workspace/.DS_Store'), PosixPath('/Users/ana.gomes/personal-workspace/dotfiles'), PosixPath('/Users/ana.gomes/personal-workspace/pass2dashlane'), PosixPath('/Users/ana.gomes/personal-workspace/speakerfight'), PosixPath('/Users/ana.gomes/personal-workspace/sandbox'), PosixPath('/Users/ana.gomes/personal-workspace/blog-engine'), PosixPath('/Users/ana.gomes/personal-workspace/looong'), PosixPath('/Users/ana.gomes/personal-workspace/20-texts-in-my-pocket')]
Nesse caso, ele não caminha recursivamente.
Bem, esse foi o primeiro micro texto (um pequeno drop) sobre Python. Caso você conheça outros usos legais que não foram citados, sugere aí que vamos aumentando a lista. Até mais!
Translations
comments powered by Disqus