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