7.1 Operações Básicas
Você já aprendeu a trabalhar com arquivos, agora vamos trabalhar um pouco com diretórios. Às vezes é parecido com trabalhar com arquivos, às vezes não. Diretórios têm suas próprias particularidades. As funções principais para trabalhar com diretórios são fornecidas pelos módulos os
e shutil
.
As operações principais com diretórios são:
Criando um diretório
Para criar um novo diretório, usamos a função os.mkdir()
.
Exemplo:
import os
# Criando um novo diretório
os.mkdir('new_directory')
print("Diretório 'new_directory' criado")
Criando múltiplos diretórios aninhados
Para criar múltiplos diretórios aninhados, usamos a função os.makedirs()
.
Exemplo:
import os
# Criando múltiplos diretórios aninhados
os.makedirs('parent_directory/child_directory')
print("Diretórios aninhados 'parent_directory/child_directory' criados")
Excluindo um diretório
Para excluir um diretório vazio, usamos a função os.rmdir()
. Para excluir um diretório com conteúdo, usamos a função shutil.rmtree()
.
Exemplo:
import os
# Excluindo um diretório vazio
os.rmdir('new_directory')
print("Diretório 'new_directory' excluído")
Exemplo de exclusão de diretório com conteúdo:
import shutil
# Excluindo diretório com conteúdo
shutil.rmtree('parent_directory')
print("Diretório 'parent_directory' e todo seu conteúdo excluído")
Importante!
Nunca exclua um diretório com todo o conteúdo. Em um dos 10 casos, um bug pode aparecer no seu programa, e você acaba apagando metade dos arquivos do disco. Todo mundo já passou por isso. Nunca faça isso.
Recomenda-se verificar se o diretório existe antes de excluí-lo usando a função os.path.exists()
. Isso pode prevenir erros relacionados à exclusão de um diretório não existente ou caminho errado.
Exemplo:
import os
import shutil
# Verificando existência do diretório antes de excluí-lo
directory_path = 'parent_directory'
if os.path.exists(directory_path):
shutil.rmtree(directory_path)
print(f"Diretório '{directory_path}' e todo seu conteúdo excluído")
else:
print(f"Diretório '{directory_path}' não existe, exclusão impossível")
7.2 Copiando Diretórios
Movendo e renomeando um diretório
Para mover ou renomear um diretório, usamos a função os.rename()
.
import os
# Criando diretório para exemplo
os.mkdir('original_directory')
# Renomeando diretório
os.rename('original_directory', 'renamed_directory')
print("Diretório 'original_directory' renomeado para 'renamed_directory'")
Copiando um diretório
Para copiar um diretório, usamos a função shutil.copytree()
. Esta função não só copia o conteúdo do diretório, mas também cria um novo diretório no caminho de destino especificado.
import os
import shutil
# Criando diretório para exemplo
os.mkdir('source_directory')
# Copiando diretório
shutil.copytree('source_directory', 'destination_directory')
print("Diretório 'source_directory' copiado para 'destination_directory'")
7.3 Diretório Atual
Cada programa em execução tem o conceito de "diretório de trabalho atual" associado a ele. Normalmente, é o diretório onde o programa foi iniciado e onde ele procura seus arquivos auxiliares. Por exemplo, todos os arquivos cujo caminhos são especificados sem nome de diretório serão procurados no diretório atual.
Obtendo o diretório de trabalho atual
Para obter o diretório de trabalho atual, usamos a função os.getcwd()
.
import os
# Obtendo o diretório de trabalho atual
current_directory = os.getcwd()
print(f"Diretório de trabalho atual: {current_directory}")
Mudando o diretório de trabalho atual
Para mudar o diretório de trabalho atual, usamos a função os.chdir()
.
import os
# Mudando o diretório de trabalho atual
os.chdir('new_directory')
print(f"Diretório de trabalho atual mudado para: {os.getcwd()}")
Alterar o diretório de trabalho atual pode afetar os caminhos para os arquivos que são especificados relativamente ao diretório atual. Tenha cuidado ao mudar o diretório, pois isso pode levar a erros se o programa espera um arquivo no diretório original.
Verificando a existência de um diretório
Para verificar se um diretório existe, usamos a função os.path.exists()
.
import os
# Verificando a existência de um diretório
directory_path = 'new_directory'
if os.path.exists(directory_path):
print(f"Diretório '{directory_path}' existe")
else:
print(f"Diretório '{directory_path}' não existe")
Obtendo o caminho absoluto do diretório
Para obter o caminho absoluto, usamos a função os.path.abspath()
.
import os
# Obtendo o caminho absoluto do diretório
relative_path = 'example_directory'
absolute_path = os.path.abspath(relative_path)
print(f"Caminho absoluto: {absolute_path}")
7.4 Conteúdo do Diretório
Obtendo a lista de arquivos e diretórios
Para obter a lista de arquivos e diretórios em um diretório especificado, usamos a função os.listdir()
.
import os
# Obtendo a lista de arquivos e diretórios no diretório atual
contents = os.listdir('.')
print(f"Conteúdo do diretório atual: {contents}")
Você pode trabalhar com arquivos e diretórios não como listas de caminhos, mas como objetos mais complexos.
Obtendo informações sobre o conteúdo do diretório usando os.scandir()
A função os.scandir()
retorna um iterador que fornece objetos DirEntry
para cada entrada no diretório. Esses objetos contêm informações sobre arquivos e diretórios, tornando seu uso mais eficiente em comparação com os.listdir()
, especialmente para grandes catálogos.
import os
# Obtendo informações sobre o conteúdo do diretório
with os.scandir('.') as entries:
for entry in entries:
print(f"Nome: {entry.name}, É diretório: {entry.is_dir()}, É arquivo: {entry.is_file()}")
GO TO FULL VERSION