2011-01-12 16 views
5

Estoy tratando de leer una imagen JPG en Python.¿Por qué no puedo leer más de 16 bytes de un archivo JPEG en Python?

hasta ahora tengo:

f = open("test.jpg") 
ima = f.read(16) 

print "'%s'"% (ima) 

se lee 16 bytes y muestra la cadena en la consola, pero parece que no puedo mostrar más de 32 bytes. ¿Por qué?

Cuando intente leer 32 bytes o más, la salida será la misma que cuando lea 16 bytes. ¿Por qué no puedo leer más de 16 bytes de la imagen jpeg?

Respuesta

11

dos cuestiones:

  1. Conjunto modo de lectura a binario. De esta forma, la función file.read no intentará convertir secuencias '\ r \ n'.

  2. Está intentando imprimir cadena con terminación NULL a la consola. La función print encuentra el primer carácter cero en su cadena y termina. Utilice binascii.hexlify para convertirlo en el hexágono:


f = open("test.jpg", "rb") 
ima = f.read(16) 

print "%s" % (binascii.hexlify(ima)) 
+4

En lugar de eso * horrible * función llamada en binascii, 'repr()' podría ser más útil aquí. –

+0

@yurymik ¿el argumento '(16)' significa que se lee en 16 bytes, o que lo lee en unidades de 16 bits? – AllTradesJack

+1

@joshsvoss: file.read ([size]) Leer a lo mucho bytes de tamaño del archivo (menos si la lectura coincide con EOF antes de obtener bytes de tamaño). https://docs.python.org/2/library/stdtypes.html – yurymik

5

es probable que necesite para ajustar el modo abierto a binario:

f = open("test.jpg", "rb") # 'rb' here means "read mode, binary" 

Ver this similar question para una descripción más detallada.

Cuestiones relacionadas