usar modulo tqdm com barra de progresso no terminal

This commit is contained in:
2025-04-28 11:12:13 +01:00
parent a62d2feba8
commit b09becb4fe

View File

@ -11,10 +11,10 @@ def listar_ficheiros(
extensoes: list[str] | None = None, extensoes: list[str] | None = None,
) -> list: ) -> list:
""" """
Percorrer recursivamente a pasta de origem e devolver lista de caminhos completos dos ficheiros. Percorrer recursivamente a pasta de origem e devolver lista de caminhos
completos dos ficheiros.
versão Pathlib versão Pathlib
""" """
sha256_ficheiros: dict[str, str] = {}
caminho_origem = Path(origem) caminho_origem = Path(origem)
if not caminho_origem.exists(): if not caminho_origem.exists():
raise FileNotFoundError(f"Erro: a pasta '{origem}' não existe.") raise FileNotFoundError(f"Erro: a pasta '{origem}' não existe.")
@ -30,17 +30,17 @@ def listar_ficheiros(
] ]
# criar lista de ficheiros # criar lista de ficheiros
ficheiros = [] ficheiros = []
for item in tqdm( itens = caminho_origem.rglob("*")
caminho_origem.rglob("*"), desc="A listar ficheiros", unit="ficheiro"
): with tqdm(desc="A listar ficheiros", unit="ficheiro") as barra_progresso:
for item in itens:
if item.is_file(): if item.is_file():
# filtro de ficheiros ocultos
if not incluir_ocultos and item.name.startswith("."): if not incluir_ocultos and item.name.startswith("."):
continue continue
# filtro de extensoes
if extensoes and item.suffix.lower() not in extensoes: if extensoes and item.suffix.lower() not in extensoes:
continue continue
ficheiros.append(str(item)) ficheiros.append(str(item))
barra_progresso.update(1)
return ficheiros return ficheiros
@ -51,7 +51,8 @@ def listar_ficheiros_unicos(
extensoes: list[str] | None = None, extensoes: list[str] | None = None,
) -> dict[str, list[str]]: ) -> dict[str, list[str]]:
""" """
Listar ficheiros unicos na pasta origem, agrupando caminhos por assinatura SHA256. Listar ficheiros unicos na pasta origem, agrupando caminhos por assinatura
SHA256.
Retorna dicionario: { assinatura: [caminho1, caminho2, ...] } Retorna dicionario: { assinatura: [caminho1, caminho2, ...] }
""" """
caminho_origem = Path(origem) caminho_origem = Path(origem)
@ -70,19 +71,18 @@ def listar_ficheiros_unicos(
# dicionario de ficheiros com assinatura # dicionario de ficheiros com assinatura
ficheiros_por_assinatura: dict[str, list[str]] = {} ficheiros_por_assinatura: dict[str, list[str]] = {}
itens = caminho_origem.rglob("*")
for item in tqdm( with tqdm(desc="A listar ficheiros", unit="ficheiro") as barra_progresso:
caminho_origem.rglob("*"), desc="A listar ficheiros únicos", unit="ficheiro" for item in itens:
):
if item.is_file(): if item.is_file():
# filtro ficheiros ocultos
if not incluir_ocultos and item.name.startswith("."): if not incluir_ocultos and item.name.startswith("."):
continue continue
# filtro extenseos
if extensoes and item.suffix.lower() not in extensoes: if extensoes and item.suffix.lower() not in extensoes:
continue continue
assinatura = gerar_assinatura_SHA256_ficheiro(str(item)) assinatura = gerar_assinatura_SHA256_ficheiro(str(item))
ficheiros_por_assinatura.setdefault( ficheiros_por_assinatura.setdefault(
assinatura, []).append(str(item)) assinatura, []).append(str(item))
barra_progresso.update(1)
return ficheiros_por_assinatura return ficheiros_por_assinatura