Introdução
. . ├── dir1 │ ├── subdir1 │ │ ├── file1 │ │ └── file2 │ └── subdir2 ├── dir2 │ ├── subdir1 │ └── subdir2 │ ├── file1 │ └── file2 ├── file1 └── file2
A estrutura apresentada acima é a arvore que iremos executar os testes em linguagem Python.
Escopo
Neste tutorial será apresentado somente remoção de arquivos e diretórios. Na republicação disponível em Brito: Manipulando arquivos Grande em Python é apresentado a cópia
Como o Python é multiplataforma, estes comandos não são apenas para GNU/Linux, eles também servem para outros Sistemas Operacionais como MS/Windows, IOS e Unix.
Partiremos do principio que seu ambiente python esteja instalado, operacional e configurado.
Será apresentado a execução direta pela console python, e via script.
Instalação
Como dito no escopo não será abordado a instalação, entretanto se o seu sistema operacional é GNU/Linux, você poderá seguir a estes tutoriais:
- Brito: Instalar várias versões de Python sobre GNU/Linux
- Brito: Instalar várias versões de Python sobre GNU/Linux via buildout
- Brito: Virtualenv Python - Encapsulamento de mudanças
procedimentos
A linguagem Python permite configurações específicas para os scripts e programas, que são realizadas no ambiente de execução, assim como as linguagens comumente utilizadas em meio corporativo.
Mas uma vantagem que poucas linguagens permitem é a criação de instâncias de ambientes facilmente escaláveis e replicáveis, detalhes em Brito: Pip - User Guide e Brito: pip freeze.
No tutorial Brito: Ativar e desativar virtualenv, é apresentado como alternar entre os ambientes virtuais python, com suas configurações específicas e pacotes distintos.
Será realizado todos os procedimentos em um ambiente de teste, criado no /tmp.
criar ambientes de testes
$mkdir /tmp/env $cd /tmp/env $for ((i=1;i<=2;i++)); do for ((j=1;j<=2;j++)); do mkdir -p dir$i/subdir$j; touch dir$i/subdir$i/file$j; touch file$i; done; done $for ((i=1;i<=2;i++)); do for ((j=1;j<=2;j++)); do mkdir -p dir$i/subdir$j; touch dir$i/subdir$i/file$j; touch file$i; done; done
Quem estiver utilizando o MS/Windows faça pela parte gráfica. ;-)
O ambiente deverá ficar assim:
. ├── dir1 │ ├── subdir1 │ │ ├── file1 │ │ └── file2 │ └── subdir2 ├── dir2 │ ├── subdir1 │ └── subdir2 │ ├── file1 │ └── file2 ├── file1 └── file2
Criando o ambiente virtual python para este propósito
$ virtualenv-2.7 ~/projetos/py27-`date +%s`
Ativar ambiente virtual python criado para os testes
$ source ~/projetos/py27-1437408269/bin/activate (py27-1437408269) $
Console
Acesse o console Python.
Todos os comandos nesta sessão deverão ser executados no console Python.
(py27-1437408269) $ cd /tmp/env (py27-1437408269) $ python Python 2.7.10 (default, Jul 16 2015, 11:58:21) [GCC 4.8.4] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> >>> >>>
Bibliotecas
Para iniciar importa-se as bibliotecas necessárias para trabalhar com o Sistema Operacional, 'os' e 'shutil'.
>>> import os, shutil
Exibir o conteúdo
Também é possível executar comandos do sistema operacional, para listagem de conteúdo, como os comandos dir(ms/dos) ou ls(GNU/linux).
>>> os.system('dir') dir1 dir2 file1 file2 0 >>> os.system('ls') dir1 dir2 file1 file2 0 >>> os.system('ls dir1') subdir1 subdir2 0 >>> os.system('ls dir1/subdir1') file1 file2 0 >>> os.system('ls dir2/subdir1') 0
Remover diretórios vazios
>>> os.rmdir('dir2/subdir1') >>>
Se não estiver vazio não será aceito o comando
>>> os.rmdir('dir2/subdir2') Traceback (most recent call last): File "", line 1, in OSError: [Errno 39] Directory not empty: 'dir2/subdir2' >>>
Remover arquivos
>>> os.remove('dir2/subdir2/file2') >>>
Remover arvores
Este comando remove completamente o diretório e todo o seu conteúdo. E é irreversível.
>>> shutil.rmtree('dir2') >>>
Estrutura atualizada
>>> os.system('tree .') . ├── dir1 │ ├── subdir1 │ │ ├── file1 │ │ └── file2 │ └── subdir2 ├── file1 └── file2 3 directories, 4 files 0 >>>
Remover arvores caminho absoluto
Este comando remove completamente o diretório e todo o seu conteúdo. E é irreversível.
>>> shutil.rmtree('/tmp/env') >>>
Script Python
Agora tudo novamente, mas em scripts python.
Crie novamente o ambiente de testes descrito em procedimentos.
Acesse o diretório principal do ambiente.
A estrutura deverá estar como demonstrada abaixo:
$ tree . ├── dir1 │ ├── subdir1 │ │ ├── file1 │ │ └── file2 │ └── subdir2 ├── dir2 │ ├── subdir1 │ └── subdir2 │ ├── file1 │ └── file2 ├── file1 └── file2 6 directories, 6 files
Como a arvore '/tmp/env' será removida no final, iremos colocar o script python em '~/projetos/bin', que ainda não exite.
Para editor irei utilizar o 'vim', utilize o seu preferido.
$ mkdir -pv ~/projetos/bin $ vim ~/projetos/bin/example_file.py
Script Python para estudo
Para facilitar a execução do script de forma limpa, foi acrescentado manipulação de erros.
executar Script Python
python ~/projetos/bin/example_file.py
Saída script
Saída comando >>> os.system('dir') dir1 dir2 file1 file2 Saída comando >>> os.system('ls') dir1 dir2 file1 file2 Saída comando >>> os.system('tree') . ├── dir1 │ ├── subdir1 │ │ ├── file1 │ │ └── file2 │ └── subdir2 ├── dir2 │ ├── subdir1 │ └── subdir2 │ ├── file1 │ └── file2 ├── file1 └── file2 6 directories, 6 files Executando comando >>> os.rmdir('dir2/subdir1') executado com sucesso! Saída comando >>> os.system('tree') . ├── dir1 │ ├── subdir1 │ │ ├── file1 │ │ └── file2 │ └── subdir2 ├── dir2 │ └── subdir2 │ ├── file1 │ └── file2 ├── file1 └── file2 5 directories, 6 files Executando comando >>> os.rmdir('dir2/subdir2') Ops: [Errno 39] Directory not empty: 'dir2/subdir2' Executando comando >>> os.rmdir('dir2/subdir2/file2') executado com sucesso! Executando comando >>> shutil.rmtree('dir2/') executado com sucesso! Saída comando >>> os.system('tree') . ├── dir1 │ ├── subdir1 │ │ ├── file1 │ │ └── file2 │ └── subdir2 ├── file1 └── file2 3 directories, 4 files Executando comando >>> shutil.rmtree('/tmp/env/') executado com sucesso!
Comentários