1
resposta

Cópia de arquivo em Python

Boa noite,

Fiquei em dúvidas neste código, que copia um arquivo. Gostaria que por favor me confirmassem acerca do que o código e funções realizam:

#abro a imagem

logo = open('python-logo.png', 'rb')

#Aqui preciso desta função para leitura do arquivo que chamei, certo?

data = logo.read()

#Fecha o arquivo aberto

logo.close() x

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

#Aqui estou sobreescrevendo o arquivo data?

logo2.write(data)

#Fecha o arquivo aberto

logo2.close()

Grato!

1 resposta

Boa noite Vinícius!

Sobre as funções: A primeira função chamada, a função open() , cria um objeto do tipo File. Essa função, além de criar um objeto do tipo File, retorna um endereço de memória. Por isso foi armazenada em uma variável. Nesse caso, a variável foi chamada de logo Ou seja, essa variável armazena um endereço de memória, e é um objeto do tipo File Essa função recebeu o primeiro parâmetro, que é o nome do arquivo a ser aberto, e o segundo é opcional, que é o modo de como o arquivo vai ser aberto. Por se tratar de uma imagem, é usado o modo rb (read binary)

Agora, devido a variável logo ser um objeto do tipo File, temos agora acesso a todos os métodos pertencentes a esse objeto. Sendo um deles, o método read()

Depois de ter aberto a imagem, é necessário ler os dados dessa imagem, por isso a função read(), que retorna uma string contendo o que foi lido. Entretanto, como o modo em que abrimos o arquivo foi em binário, o retorno que teremos, será em bytes. Se você for printar o conteúdo da variável, dessa forma print(data), verá um monte de valores estranhos. Esses valores são os bytes que compõem a imagem.

Por fim, após termos aberto e lidos os dados (nesse caso, nossa imagem), fechamos o arquivo, para liberar a memória que foi alocada para realizar essas operações

Em logo2 = open('python-logo2.png', 'wb') agora estamos criando um novo objeto, também do tipo File, com o nome de logo2, além de chamarmos essa imagem de python-logo2.png . Esse objeto está em modo wb, ou seja, irá escrever em modo binário. Esse modo irá sobrescrever tudo o que tem no arquivo, e substituir pelo que mandarmos colocar lá dentro desse arquivo. Nesse caso, se copiarmos os bytes da primeira imagem, e colarmos em um outro arquivo, teríamos como resultado, a mesma imagem. Esse é objetivo da seguinte linha: logo2.write(data). Ou seja, essa linha pega todos os bytes que formam a primeira imagem e cola em um novo arquivo. Logo, temos uma cópia.

Espero ter ajudado!

Abraços,

Matheus