2011-01-12 14 views
5

Sto provando a leggere un'immagine JPG in Python.Perché non riesco a leggere più di 16 byte di un file JPEG in Python?

Finora ho:

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

print "'%s'"% (ima) 

legge 16 byte e visualizza la stringa in console, ma sembra che non riesco a visualizzare più di 32 byte. Perché?

Quando tenta di leggere 32 o più byte, l'output sarà lo stesso di quando legge 16 byte. Perché non riesco a leggere più di 16 byte dell'immagine jpeg?

risposta

11

due questioni qui:

  1. Impostare la modalità di lettura in binario. In questo modo la funzione file.read non tenterà di convertire le sequenze di \ r \ n '.

  2. Si sta tentando di stampare una stringa con terminazione NULL sulla console. La funzione print trova il primo carattere zero nella stringa e termina. Utilizzare binascii.hexlify per convertirlo all'esagono:


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

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

piuttosto che * * orribilmente chiamato funzione nel binascii, 'repr()' potrebbe essere più utile qui. –

+0

@yurymik fa l'argomento '(16)' significa che legge in 16 byte o che lo legge in unità di 16 bit? – AllTradesJack

+1

@joshsvoss: file.read ([size]) Legge al massimo la dimensione dei byte dal file (meno se la lettura colpisce EOF prima di ottenere i byte di dimensione). https://docs.python.org/2/library/stdtypes.html – yurymik

5

probabilmente è necessario impostare la modalità di apertura al binario:

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

Vedi this similar question per una descrizione più approfondita.

Problemi correlati