Manipulando arquivos e
diretórios com PathLib
Live de Python # 199
Roteiro
1. Manipulação de arquivos 3. Resolvendo problemas
Uma introdução ao sistema de arquivos Usando a pathlib
2. PahtLib 4. Extras
O básico necessário PathLib3x, aioPathlib
[Link]/dunossauro [Link]/livedepython [Link]@[Link]
Ajude o projeto <3
Acássio Anjos, Ademar Peixoto, A Earth, Alexandre Harano, Alexandre Souza, Alexandre Takahashi, Alexandre Villares, Alex
Lima, Alynne Ferreira, Alysson Oliveira, Ana Carneiro, Ana Padovan, Andre Azevedo, André Rocha, Aquiles Coutinho,
Arnaldo Turque, Ayrton Freeman, Bloquearsites Farewall, Bruno Barcellos, Bruno Freitas, Bruno Guizi, Bruno Oliveira, Bruno
Ramos, Caio Nascimento, César Almeida, Christiano Morais, Clara Battesini, Cleber Santos, Daniel Haas, Danilo Segura,
Dartz Dartz, David Kwast, Delton Porfiro, Dhyeives Rodovalho, Diego Guimarães, Dilenon Delfino, Donivaldo Sarzi, Douglas
Bastos, Douglas Braga, Douglas Martins, Douglas Zickuhr, Emerson Rafael, Érico Andrei, Eugenio Mazzini, Euripedes
Borges, Evandro Avellar, Fabiano Gomes, Fabio Barros, Fábio Barros, Fabio Castro, Fábio Thomaz, Felipe Rodrigues,
Fernanda Prado, Flávio Meira, Flavkaze Flavkaze, Franklin Silva, Gabriel Barbosa, Gabriel Simonetto, Geandreson Costa,
Guilherme Felitti, Guilherme Gall, Guilherme Ostrock, Gustavo Dettenborn, Heitor Fernandes, Henrique Junqueira, Igor
Taconi, Ismael Ventura, Israel Gomes, Italo Silva, Jair Andrade, Janael Pinheiro, João Lugão, Johnny Tardin, Jonatas Leon,
Jonatas Oliveira, Jônatas Silva, Jorge Plautz, Jose Mazolini, Juan Gutierrez, Juliana Machado, Julio Silva, Kaio Peixoto,
Kaneson Alves, Leandro Botassio, Leandro Miranda, Leonardo Cruz, Leonardo Mello, Leonardo Nazareth, Lucas Adorno,
Lucas Mello, Lucas Mendes, Lucas Oliveira, Lucas Polo, Lucas Praciano, Lucas Teixeira, Lucas Valino, Luciano Silva,
Luciano Teixeira, Luiz Junior, Luiz Lima, Maiquel Leonel, Marcelino Pinheiro, Marcelo Matte, Márcio Martignoni, Marco
Mello, Marcos Gomes, Marco Yamada, Maria Clara, Marina Passos, Mario Deus, Matheus Silva, Matheus Vian, Murilo
Andrade, Murilo Cunha, Murilo Viana, Natan Cervinski, Nicolas Teodosio, Osvaldo Neto, Patricia Minamizawa, Patrick Brito,
Paulo Tadei, Pedro Henrique, Pedro Pereira, Peterson Santos, Priscila Santos, Rafael Lopes, Rafael Romão, Ramayana
Menezes, Reinaldo Silva, Renan Moura, Renato Veirich, Richard Nixon, Riverfount Riverfount, Rodrigo Ferreira, Rodrigo
Freire, Rodrigo Junior, Rodrigo Vaccari, Rogério Sousa, Ronaldo Silva, Rui Jr, Samanta Cicilia, Sara Selis, Thiago Araujo,
Thiago Borges, Thiago Bueno, Thiago Curvelo, Thiago Moraes, Tony Dias, Victor Wildner, Vinícius Bastos, Vinicius
Figueiredo, Vítor Gomes, Vitor Luz, Vlademir Souza, Vladimir Lemos, Wellington Abreu, Wesley Mendes, William Alves,
Willian Lopes, Wilson Neto, Yury Barros
Obrigado você
O sistema de
arquivos FS
Sistema de arquivos
Afinal como manipulamos arquivos e pastas no sistema?
Usamos o Sistema de arquivos
[Link]
Sistema de arquivos
Afinal como manipulamos arquivos e pastas no sistema?
Usamos o Sistema de arquivos
"O sistema de arquivos é responsável por dar
nomes, armazenar e recuperar os arquivos no
seu sistema operacional"
[Link]
Sistemas de arquivos
O que devemos considerar é que diferentes sistemas operacionais usam
diferentes sistemas de arquivos.
● Windows
○ FAT
○ FAT32
○ NTFS
● Linux
○ EXT4
○ BtrFS
○ ZFS
● MacOS
○ APFS
Sistemas de arquivos
O que devemos considerar é que diferentes sistemas operacionais usam
diferentes sistemas de arquivos.
● Windows
○ FAT MS rules
○ FAT32 ???
○ NTFS
● Linux
○ EXT4
○ BtrFS
○ ZFS POSIX
● MacOS
○ APFS
Sistemas de arquivos
O que devemos considerar é que diferentes sistemas operacionais usam
diferentes sistemas de arquivos.
● Windows
○ FAT MS rules
○ FAT32 ???
○ NTFS
● Linux
○ EXT4
○ BtrFS
○ ZFS POSIX
● MacOS
○ APFS Interface portável
entre sistemas
operacionais
Diferentes sistemas de arquivos
De forma totalmente superficial. Um problema inicial é
Os caminhos de diretórios/pastas/arquivos mudam de acordo com seu
sistema operacional.
O mesmo código escrito no windows, não funciona no linux e no mac
Um exemplo simples
files
pasta_0 pasta_1
pasta_n
O desafio
Listar a pasta_0, que está dentro da pasta files, caso existam arquivos .txt
dentro da pasta_0, printar o conteúdo dos arquivos.
files
pasta_0
*.txt
O desafio
Listar a pasta_0, que está dentro da pasta files, caso existam arquivos .txt
dentro da pasta_0, printar o conteúdo dos arquivos.
Listar a pasta_0, que está dentro da pasta files, caso
existam arquivos .txt dentro da pasta_0, crie uma nova
pasta chamada desafio_2, e copie os arquivos para essa
pasta.
Desafio 2
O desafio 2
O desafio 2
API de baixo nível
Quando falamos de comunicação com o sistema operacional, e o FS, no
nosso caso. O Python conta com uma gama de bibliotecas
[Link]
API de baixo nível
Quando falamos de comunicação com o sistema operacional, e o FS, no
nosso caso. O Python conta com uma gama de bibliotecas
[Link]
API de baixo nível
[Link]
API de baixo nível
[Link]
API de baixo nível
[Link]
API de baixo nível
[Link]
Caminhos de mão única
O python, via um hack ([Link]) consegue converter paths POSIX em
paths windows.
[Link]
Path
Uma introdução lib
O que é a Pathlib?
A Pathlib é uma alternativa a todas as API de baixo nível
● os
● [Link]
● glob
● stat
● posixpath / ntpath / macpath (Finado Python 2)
● …
* Não cobre shutil, pois já é uma AP de alto nível
A história da pathlib
● PEP-355 - 2006
○ Um objeto Path, que implementa todas as operações de os,
[Link] e shtuil comuns para arquivos
○ REJEITADA
● Criação da pathlib - Jan/2012
○ Biblioteca externa que implementa a PEP-355
○ Com alguns detalhes extras
● PEP-428 - jun/2012 - Python 3.4
○ Inclusão da biblioteca externa ao biblioteca padrão
● Python 3.6 - 2016
○ Interoperabilidade com os módulos antigos
A ideia da Pathlib
A ideia da Pathlib é fornecer uma API orientada a objetos.
Assim como datatime é um objeto e não manipulação de strings e
números.
Além de não ter os problemas relacionados aos paths do windows,
fornecer uma API que permite que você manipule paths do linux no
windows, por exemplo.
Bom, chega de enrolação
Alguns exemplos básicos - Path
Alguns exemplos básicos - File
A estrutura da biblioteca
[Link]
A estrutura da biblioteca
De maneira geral,
sempre importaremos
Path
[Link]
A estrutura da biblioteca
De maneira geral,
sempre importaremos
Path
O python inicia a
classe concreta correta
para cada sistema
[Link]
A estrutura da biblioteca
Se quisermos fazer um Se quisermos fazer um
código que roda no código que roda no
linux, mas no windows windows, mas no linux
[Link]
Pathlib para manipular sistema de arquivos
● Arquivos
○ touch()
■ cria um novo arquivo ou altera seu timestamp
○ unlink()
■ remove um arquivo
● Paths
○ mkdir()
■ Cria uma pasta
○ rmdir()
■ remove uma pasta
● Tudo
○ rename
■ Renomeia o arquivo
Globing
Proble
Que vamos resolver
com Pathlib mas
De volta ao problema 1
Listar a pasta_0, que está dentro da pasta files, caso existam arquivos .txt
dentro da pasta_0, printar o conteúdo dos arquivos.
files
pasta_0
*.txt
Solução com Pathlib
Comparação
O problema 2
Listar a pasta_0, que está dentro da pasta files, caso existam
arquivos .txt dentro da pasta_0, crie uma nova pasta chamada
desafio_2, e copie os arquivos para essa pasta.
Solução com pathlib
Comparação
Extras 3x, async, ...
Sobre o shutil + pathlib
hmmmmmmmm
Asyncio + pathlib
Olha que lindo
[Link]/dunossauro [Link]/livedepython [Link]@[Link]
Ajude o projeto <3