[python drops] Pathlib


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