2010-04-19 22 views

Respuesta

65

File mode, escribir y binario. Como está escribiendo un archivo .jpg, se ve bien.

Pero si se supone que leer ese archivo JPG es necesario utilizar 'rb'

Más información

En Windows, 'b' anexa al modo abre el archivo en modo binario, por lo también hay modos como 'rb', 'wb', y 'r + b'. Python en Windows hace una distinción entre archivos de texto y binarios ; los caracteres de fin de línea en los archivos de texto se modifican automáticamente cuando se leen o escriben los datos. Esta modificación entre bastidores de los datos de archivo está bien para los archivos de texto ASCII , pero dañará los datos binarios de esa manera en los archivos JPEG o EXE.

+3

Concretamente, en Windows para un archivo abierto en modo texto, 'fd.write (" foo \ n ")' realmente escribe en el disco 'foo \ r \ n' (observe el' \ r'). –

3

Ese es el modo con el que está abriendo el archivo. "wb" significa que está escribiendo en el archivo (w) y que está escribiendo en modo binario (b).

Mira la documentación para obtener más: clicky

38

El wb indica que el archivo se abre para escribir en modo binario.

En los sistemas Unix (Linux, Mac OS X, etc.), el modo binario no hace nada: trata los archivos de texto de la misma manera que cualquier otro archivo. En Windows, sin embargo, los archivos de texto se escriben con terminaciones de línea ligeramente modificadas. Esto causa un problema grave cuando se trata de archivos binarios reales, como exe o jpg. Por lo tanto, al abrir archivos que no se supone que sean texto, incluso en Unix, debe usar wb o rb. Use el número w o el r solo para archivos de texto.

Referencia: http://docs.python.org/tutorial/inputoutput.html#reading-and-writing-files

4

También se debe considerar el uso de open en lugar de file. file estaba en desuso en Python 2 (no se pudo encontrar qué versión) y se ha eliminado en py3k. (gracias Scott)

Ver this question para más información.

+1

Esta respuesta probablemente sería mejor como un comentario a la primera respuesta. –

+2

El uso de 'file' en lugar de' open' ha quedado obsoleto en Python 2 durante un tiempo. Ha sido * eliminado * de Python 3. –

+0

@Scott: gracias, edité mi respuesta. @brian: tienes razón, haré esto la próxima vez, gracias. –

Cuestiones relacionadas