From 079f8cffa855e9acbdf33361319860d29dbe011a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luiz=20Ot=C3=A1vio?= Date: Sat, 17 Dec 2022 12:36:47 -0300 Subject: [PATCH] os.path.getsize e os.stat para dados dos arquivos (tamanho em bytes) --- aula172.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 aula172.py diff --git a/aula172.py b/aula172.py new file mode 100644 index 0000000..bc574d4 --- /dev/null +++ b/aula172.py @@ -0,0 +1,52 @@ +# os.path.getsize e os.stat para dados dos arquivos (tamanho em bytes) +import math +import os +from itertools import count + + +def formata_tamanho(tamanho_em_bytes: int, base: int = 1000) -> str: + """Formata um tamanho, de bytes para o tamanho apropriado""" + + # Original: + # https://stackoverflow.com/questions/5194057/better-way-to-convert-file-sizes-in-python + + # Se o tamanho for menor ou igual a 0, 0B. + if tamanho_em_bytes <= 0: + return "0B" + + # Tupla com os tamanhos + # 0 1 2 3 4 5 + abreviacao_tamanhos = "B", "KB", "MB", "GB", "TB", "PB" + # Logaritmo -> https://brasilescola.uol.com.br/matematica/logaritmo.htm + # math.log vai retornar o logaritmo do tamanho_em_bytes + # com a base (1000 por padrão), isso deve bater + # com o nosso índice na abreviação dos tamanhos + indice_abreviacao_tamanhos = int(math.log(tamanho_em_bytes, base)) + # Por quanto nosso tamanho deve ser dividido para + # gerar o tamanho correto. + potencia = base ** indice_abreviacao_tamanhos + # Nosso tamanho final + tamanho_final = tamanho_em_bytes / potencia + # A abreviação que queremos + abreviacao_tamanho = abreviacao_tamanhos[indice_abreviacao_tamanhos] + return f'{tamanho_final:.2f} {abreviacao_tamanho}' + + +caminho = os.path.join('/Users', 'luizotavio', 'Desktop', 'EXEMPLO') +counter = count() + +for root, dirs, files in os.walk(caminho): + the_counter = next(counter) + print(the_counter, 'Pasta atual', root) + + for dir_ in dirs: + print(' ', the_counter, 'Dir:', dir_) + + for file_ in files: + caminho_completo_arquivo = os.path.join(root, file_) + # tamanho = os.path.getsize(caminho_completo_arquivo) + stats = os.stat(caminho_completo_arquivo) + tamanho = stats.st_size + print(' ', the_counter, 'FILE:', file_, formata_tamanho(tamanho)) + # NÃO FAÇA ISSO (VAI APAGAR TUDO DA PASTA) + # os.unlink(caminho_completo_arquivo)