Exercício 09-41:

Altere o programa visualiza.py para receber o número máximo de bytes a imprimir e quantos bytes por linha pela linha de comando.

Resposta:

##############################################################################
# Parte do livro Introdução à Programação com Python
# Autor: Nilo Ney Coutinho Menezes
# Editora Novatec (c) 2010-2024
# Quarta Edição - Março/2024 - ISBN 978-85-7522-886-9
#
# Site: https://python.nilo.pro.br/
#
# Arquivo: capitulo 09/exercicio-09-41.py
##############################################################################
import sys
import itertools


def imprime_bytes(imagem, bytes_por_linha=16):
    for b in itertools.batched(imagem, bytes_por_linha):
        hex_view = " ".join([f"{v:02x}" for v in b])
        tview = "".join([chr(v) if chr(v).isprintable() else "." for v in b])
        print(f"{hex_view} {" " * 3 * (bytes_por_linha - len(b))}{tview}")


if __name__ == "__main__":
    if len(sys.argv) != 4:
        print("Uso: python programa.py arquivo max_bytes bytes_por_linha")
        sys.exit(1)

    arquivo = sys.argv[1]
    max_bytes = int(sys.argv[2])
    bytes_por_linha = int(sys.argv[3])

    with open(arquivo, "rb") as f:
        imagem = f.read(max_bytes)

    imprime_bytes(imagem, bytes_por_linha)
Clique aqui para baixar o arquivo