74 lines
2.4 KiB
Python
74 lines
2.4 KiB
Python
# 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
|
|
# ficheiro configuração: uniq.toml
|
|
# carregar categorias e tipos de ficheiro da tabela 'tipos_ficheiros'
|
|
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"
|
|
elif extensao in [".mp3", "wav", ".aac"]:
|
|
return "audio"
|
|
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
|