Python – Como criar e trabalhar pastas

Python – Como criar e trabalhar pastas

13 de junho de 2019 1 Por Ramos de Souza Janones
Powered by Rock Convert

Dica de como criar e trabalhar com pastas com a linguagem de programação Python.

Trabalhar com diretórios no shell é diferente de trabalhar com diretórios de dentro de um programa – transplantar os comandos não vai funcionar.

Mesmo assim, há coisas específicas no uso de diretórios com programas que o Python só simplificou depois da versão 3.5 – no texto completo eu explico melhor. Mas, para o sue problema específico, você pode fazer:

from pathlib import Path

desktop = Path.home() / "Desktop"
pastinha = desktop.mkdir("Pastinha")

e, daí pra frente, para qualquer operaçao com arquivos nessa pasta – por exemplo, criar um arquivo “dados.db” lá dentro:

arq = open(pastinha / "dados.db", "wt") 

Note que não foi usado “chdir” ou equivalente – explico abaixo.

Criar um diretório em Python

Primeiro: chamar supprocess.call("mkdir pastinha") para criar uma pasta é o mesmo que telefonar para um chaveiro para abrir a porta da sua casa, quando você está com a chave na mão. Em vez de colocar a chave na porta e girar, você espera até o chaveiro vir, pegar as ferramentas dele, abrir a porta, e paga a taxa pra ele.

Isso por que desta forma o mkdir é invocado como um processo externo do sistema operacional – o sistema tem que criar um novo processo na tabela de processos, reservar os recursos para o mesmo, ler do HD o arquivo com o binário do mkdir, e encerrar o processo em seguida. Tudo isso em geral acontece muito rápido, mas usa umas mil a 10 mil vezes mais recursos computacionais do que simplesmente fazer a chamada ao sistema operacional para criar um diretório.

Leia também:  

Essa pode ser feita diretamente do Python usando-se o módulo osos.mkdir("Pastinha").

A partir do Python 3.5 no entanto, há uma nova API para tudo que é relacionado ao sistema de arquivos, que é a pathlib – ela tem um objeto unificado para representar nomes de arquivos ou diretórios, que já tem métodos para abrir ou ler um arquivo diretamente, ou criar um novo diretório embaixo daquele. Com a pathlib, o código completo seria:

Curso completo de Games, inclusive Realidade Aumentada.Powered by Rock Convert
from pathlib import Path
desktop = Path.home() / "Desktop"
desktop.mkdir("Pastinha")

(o uso de getpass.getuser para pegar o nome do usuário foi sugerido pelodo RafaelTuber em outra resposta, eu não iria lembrar de fazer isso. Mas o Anderson lembrou (nos comentários) que existe o Path.home() que faz isso de forma mais direta, dispensando saber o nome do usuário)

Mudando de diretório

Você não muda de diretório! 🙂

Aqui é que está o que faz o seu código não funcionar. A questão de “estar em um diretório” é algo relativo – o “diretório de trabalho” é uma variável de cada processo (programa) que está rodando. Antes de chamar o programa em Python, se estamos num terminal (tipo o cmd), mudamos até o diretório desejado com cd pasta/pasta<enter>. Quando o programa é chamado, o diretório de trabalho dele é esse do qual ele foi chamado “pasta/pasta” – se você usar qualquer caminho de arquivo relativo (isso é, sem começar com uma “/” ou “\” que volta à raiz do file-system, é nesse diretório que as ações acontecem). E isso acontece por que tem uma variável interna do sistema operacional, associada ao seu programa, que fala que o “diretório de trabalho corrente” (CWD) é essa “pasta/pasta”.

Se o seu próprio programa faz uma chamada ao sistema operacional dizendo “estou mudando a pasta de trabalho do programa atual”, ela é atualizada. Se o seu programa chamar os.chdir("../outra_pasta"), o sistema operacional entende que o “diretório de trabalho corrente” (CWD) agora é “pasta/outra_pasta”. Só que quando o seu programa acaba, e você volta para o cmd, qual é o CWD do cmd? Justamente o “pasta/pasta” – ele não se moveu só por que o processo filho, o seu programa em Python, mudou o próprio diretório.

Quando você usa um subprocesso pra chamar o “chdir” a mesma coisa acontece. O “chdir” é um comando embutido no shell. No caso do Windows o próprio “cmd”. O sistema operacional então cria um novo processo, executa um novo CMD internamente, como descrevi acima, esse cmd chama o sistema operacional pra mudar o próprio diretório de trabalho para outro – -e se encerra. A execução do seu programa de Python continua no diretório de trabalho em que estava antes.

No entanto a história não acaba aí – mesmo chamando os.chdir(...), e alterando corretamente o diretório de trabalho do seu programa, essa prática não é recomendada em programas modernos. Isso por que, como o diretório de trabalho é um estado de todo o programa, qualquer função que altere o mesmo vai alterar o diretório tambemnas funções que a chamaram, e qualquer outro lugar do programa – ou seja,não é uma mudança “estanque”. Se o programa for multi-thread então, a situação é pior ainda. Em outras palavras: num programa mais complexo que use mudança de diretório, não dá uma parte do programa saber qual é o diretório atual – outra função pode ter mudado o diretório.

A boa prática então é que toda e qualquer ação no sistema de arquivos use o caminho absoluto – começando desde o diretorio “/”, ou, no caso do Windows, desde o nome do drive: “C:/”. Antes da pathlib isso implicava que programas que iriam garantidamente funcionar tinham que ficar usando os.path.join o tempo todo – com a Pathlib isso fica bem mais simples.

Como proceder para realizar ações em um diretório específico

Em Python moderno então, em vez de tentar mudar o diretório, o mais correto e mais simples é guardar o diretório onde você quer fazer as operações numa variavel, e, para qualquer operação – seja criar um arquivo, outro diretório, etc… usar o operador / (o mesmo usado para divisão de números – ele é ressignificado para objetos da Pathlib) para criar novos objetos Path:

desktop = pathlib.Path("/users/xxxx/Desktop")
minha_pasta = desktop.mkdir("Minha Pasta")
# Criar novo arquivo para scrita dentro dessa nova pasta:

with (minha_pasta / "meu_arquivo.txt").open("wt") as arq:
   # dentro deste bloco, "arq" é o arquivo
   # DEsktop/Minha Pasta/meu_arquivo.txt" aberto para escrita
   ....


VOCÊ ESTÁ NAS SEÇÕES:  Programação » Python
Siga os bons!

Ramos de Souza Janones

Janones, é um empreendedor brasileiro apaixonado por empreendedorismo e tecnologia. Ao longo dos anos trabalhando com o desenvolvimento de softwares desktop desde a linguagem Clipper, passando pelo Delphi e atualmente com Java.

Optou pela formação de Publicidade e Marketing por sua segunda empresa de tecnologia ter participado do "boom" da internet nos anos 90 e na procura de melhorar seus conhecimentos em negócios.

Em razão da principal formação e profundos conhecimentos em programação e banco de dados, é capaz de realizar o desenvolvimento de aplicativos web, desktop e mobile com maior criatividade e inovação que profissionais de desenvolvimento com uma formação única e mais especifica, dedicada somente ao desenvolvimento de softwares.

Com toda sua experiência com empresas de software, sua formação e paixão por negócios escreveu o livro "Marketing para Empresas e Profissionais de Software", publicado pela editora carioca Ciência Moderna em 2012. Além de outros livros sobre programação.

Sumário
Python - Como criar e trabalhar pastas
Nome do artigo
Python - Como criar e trabalhar pastas
Descrição
Dica de como criar e trabalhar com pastas com a linguagem de programação Python.
Autor
Nome
Ramos da Informática
Logo



Frontend Do Zero Ao Profissional