# organizer.py # Funções para categorizar ficheiros e criar estrutura de destino from pathlib import Path from datetime import datetime def categorizar_por_tipo(ficheiro: str) -> str: """ Devolve o tipo de ficheiro (imagem, documento, vídeo, etc) com base na extensão. argumentos: ficheiro (str) -> caminho do ficheiro retorna: str -> tipo de ficheiro """ # TODO: extensões configuraveis externamente pelo utilizador extensao = Path(ficheiro).suffix.lower() if extensao in [".jpeg", ".jpg", ".bmp", ".cr2", ".raw"]: return "imagem" elif extensao in [".pdf", ".doc", ".docx", ".xls", ".xlsx"]: return "documento" elif extensao in [".mp4", ".mpeg", ".mov"]: return "video" else: return "outros" def obter_data_ficheiro(ficheiro: str, usar_criacao: bool = False) -> datetime: """ Devolve a data de modificação ou criação do ficheiro. argumentos: ficheiro (str) -> caminho do ficheiro usar_criacao (bool) -> retornar data de criação de ficheiro (defeito: False) retorna: datetime -> data de modificação ou criação do ficheiro """ stats_ficheiro = Path(ficheiro).stat() timestamp = stats_ficheiro.st_ctime if usar_criacao else stats_ficheiro.st_mtime return datetime.fromtimestamp(timestamp) def criar_pasta_destino( base_destino: str, categoria: str, data: datetime | None = None, formato_data: str = "%d-%m-%Y", ) -> Path: """ Cria a pasta de destino apropriada, se não existir. argumentos: base_destino (str) -> directorio raiz para criar novo directorio categoria (str) -> nome do novo directorio a criar data (datetime | None) -> nome para subdirectorio para categorizar por data (defeito: None, não criar subdirectorio de data) formato_data (str) -> formato da data ppara o nome da pasta (defeito: '%d-%m-%Y') retorna: Path -> caminho completo para o novo directorio criado """ if isinstance(data, datetime): data_directorio = data.strftime(formato_data) else: data_directorio = "" caminho_novo_directorio = Path(base_destino) / categoria / data_directorio caminho_novo_directorio.mkdir(parents=True, exist_ok=True) return caminho_novo_directorio