Código:
file('pinax/media/a.jpg', 'wb')
open
vez de file
, que foi descontinuado no Python 2 e removido no Python 3. Consulte stackoverflow.com/questions/112970/…
Código:
file('pinax/media/a.jpg', 'wb')
open
vez de file
, que foi descontinuado no Python 2 e removido no Python 3. Consulte stackoverflow.com/questions/112970/…
Respostas:
Modo de arquivo , gravação e binário. Como você está escrevendo um arquivo .jpg, parece bom.
Mas se você deveria ler aquele arquivo jpg, você precisa usar 'rb'
Mais informações
No Windows, 'b' anexado ao modo abre o arquivo no modo binário, portanto, também existem modos como 'rb', 'wb' e 'r + b'. Python no Windows faz distinção entre arquivos de texto e binários; os caracteres de fim de linha em arquivos de texto são automaticamente alterados ligeiramente quando os dados são lidos ou gravados. Essa modificação nos bastidores nos dados do arquivo é adequada para arquivos de texto ASCII, mas corromperá os dados binários como os dos arquivos JPEG ou EXE.
fd.write("foo\n")
na verdade grava no disco foo\r\n
(observe o \r
).
O wb
indica que o arquivo está aberto para gravação em modo binário.
Ao gravar no modo binário, o Python não faz alterações nos dados conforme são gravados no arquivo. No modo de texto (quando o b
é excluído como em apenas w
ou quando você especifica o modo de texto com wt
), entretanto, o Python codificará o texto com base na codificação de texto padrão. Além disso, o Python converterá as terminações de linha ( \n
) em qualquer que seja a terminação de linha específica da plataforma, o que corromperia um arquivo binário como um arquivo exe
ou png
.
O modo de texto deve, portanto, ser usado ao escrever arquivos de texto (seja usando texto simples ou um formato baseado em texto como CSV), enquanto o modo binário deve ser usado ao escrever arquivos não textuais como imagens.
Referências:
https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files https://docs.python.org/3/library/functions.html#open
wb
opção. Ao usar a w
opção, consegui fazer com que funcionasse corretamente.
b
modo só tinha efeito no Windows. Isso agora foi removido da documentação e o modo binário "deve ser usado para todos os arquivos que não contêm texto".
Esse é o modo com o qual você está abrindo o arquivo. "wb" significa que você está gravando no arquivo (w) e no modo binário (b).
Confira a documentação para mais informações: clicky
open
vez defile
.file
tornou-se obsoleto no Python 2 (não foi possível encontrar qual versão) e foi removido no py3k. (obrigado Scott) Veja esta pergunta para mais informações.