Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Me perdi um pouco aqui...

Além do r, w e a existe o modificador b que devemos utilizar quando queremos trabalhar no modo binário. Para abrir uma imagem devemos usar:

imagem = open("foto.jpg", "rb")

Por exemplo, o código abaixo cria uma cópia de uma imagem:

#arquivo copia.py logo = open('python-logo.png', 'rb') data = logo.read() logo.close()

logo2 = open('python-logo2.png', 'wb') logo2.write(data) logo2.close()

4 respostas
solução!

Qual seria a dúvida exatamente ?

sobre o algorítmo da cópia de um arquivo .png, ele faz a leitura da imagem em modo binário (linguagem de máquina, 0 a F) e replica todos esses bytes organizados em um segundo arquivo, gerando um novo arquivo válido. Se não usasse o modificador "b", ele iria "tentar" trabalhar esse arquivo como texto (para visualizar como ele "enxergaria" esse arquivo, pegue uma imagem no seu computador e abra com o bloco de notas ou outro editor de texto), resultaria em uma bagunça, ilegível, incompreensível, e ao tentar gerar uma nova imagem com esses "dados" aparentemente desorganizados, o arquivo final teria seus bytes desestruturados e resultaria em um arquivo corrompido, isso se ele conseguir "ler" o primeiro arquivo como texto...

Oi Thiago! Muito obrigado pela resposta...

Acho que minha indagação foi mais um desabafo realmente, diante da dificuldade dessa parte pra mim...

Agradeço a explicação e realmente ficou um pouco mais claro agora, o negócio é continuar aprendendo e fazendo as aulas. Percebo que quanto mais eu aprendo a fazer coisas "banais" como um jogo de adivinhação ou de forca, mais eu to aprendendo sobre programação DE FATO.

Mais especificamente sobre minha dúvida, acho que eu gostaria MUITO de entender "por que" o modificador de imagem é b (visto que w, r e a ficam bem fáceis de entender como write, read e append) ou como funciona essa linguagem de máquina de 0 a F hahah, isso são coisas muito abstratas ainda...

Novamente agradeço, abraços e boa semana!

É, realmente é uma área muito vasta. O conhecimento sobre essa linguagem de máquina é requisito primário para se aprofundar em programação, é a base, a origem, é esse conhecimento que vai responder todas essas perguntas sobre o que está acontecendo no computador quando usa tal coisa... Hoje em dia temos muitas ferramentas e tecnologias de "alto nível" que nos permitem desenvolver sem se preocupar com essa base, o que é um problema, pois cria profissionais mal acostumados com facilidades que não sabem se virar com as adversidades que surgem...

Você está cutucando o tema da forma certa, surgiu algo que você não entendeu e está correndo atrás para não deixar esse buraco no conhecimento para trás. Só que ainda não foi respondido, então para responder sua dúvida vou extender um pouco a resposta:

1 - Você já entendeu o que os modificadores W, R, e A significam e o que fazem (os nomes já são auto explicativo), mas para contextualizar com o modificador B, eu tenho que te dizer que os operadores W,R e A "sozinhos", por PADRÃO vão trabalhar com TEXTOS (modificador "t" que define "Text mode"). Ou seja, quando você coloca lá no código esses operadores sozinhos ("w", "r", "a"), é o mesmo de ter colocado "wt", "rt", "at", e dizer para o compilador "olha, vamos trabalhar O QUE TEM nesse arquivo utilizando leitura/escrita".

O que é "trabalhar em modo texto"?

R: Para resumir, você está dizendo ao programa que a estrutura do arquivo vai ser a mesma, ele vai continuar sendo um "arquivo de texto" (.txt, .py, .word, etc), e que você vai trabalhar o CONTEÚDO dele, e no final ele continuará sendo um arquivo de texto.

Aqui você tem que entender e fixar: "vamos trabalhar O QUE TEM nesse arquivo"

2 - Quando colocamos o modificador B em conjunto com os descritos acima, setamos a aplicação para fazer as mesmas coisas que eles fazem (escrever e ler), porém trabalhando O QUE É o arquivo, em binário. Aí vem a necessidade de você entender como funciona os arquivos, as aplicações para a máquina. E esses conhecimentos são conhecimentos de base, deixo abaixo o principal para você pesquisar:

  • Bits e Bytes (aqui você vai entender a diferença entre (0 e 1) e (0 a F) que eu mencionei na outra resposta. (Final da postagem deixo alguns links)

Exemplo visual de uma representação de um arquivo em modo "binário" (modificador B) :

Representação por Bytes em Hexadecimal:

REPRESENTAÇÃO POR BYTES

Quando você usa o modificador B, você está dizendo para o compilador "olha, vamos trabalhar O QUE É esse arquivo escrevendo/lendo, no modo binário"

O que é "trabalhar em modo binário"?

R: Em resumo, você estará dizendo ao programa: "Olha, iremos ler/escrever esse arquivo por completo, inclusive sua ESTRUTURA, não só o seu CONTEÚDO como no modo texto.

Aqui você tem que entender: "vamos trabalhar O QUE É esse arquivo" Você pode modificar o arquivo como um todo, não só seu conteúdo.

Sobre o conhecimento de Bits e Bytes ou relacionados à como o computador funciona:

Alguém dá um prêmio pra essa resposta incrível!! Eu li isso tudo sorrindo e cheguei a estalar os dedos (tipo 'mas é claaaro') a primeira ve que li 'binário' no texto (no seu texto, na sua resposta hahah).

Mais uma vez muito obrigado, coloquei esse curso de arquitetura de computadores na minha lista de próximos cursos!