2011-01-12 5 views
5

Ich versuche, ein JPG-Bild in Python zu lesen.Warum kann ich in Python nicht mehr als 16 Bytes einer JPEG-Datei lesen?

Bisher habe ich:

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

print "'%s'"% (ima) 

Es liest 16 Bytes und zeigt die Zeichenfolge in der Konsole, aber es sieht aus wie ich nicht mehr als 32 Byte angezeigt werden kann. Warum?

Wenn versucht wird, 32 oder mehr Bytes zu lesen, ist die Ausgabe die gleiche wie beim Lesen von 16 Bytes. Warum kann ich nicht mehr als 16 Bytes des JPEG-Bildes lesen?

Antwort

11

Zwei Themen hier:

  1. Set-Lesemodus auf binär. Auf diese Weise file.read Funktion wird nicht versuchen, '\ r \ n' Sequenzen zu konvertieren.

  2. Sie versuchen, NULL-terminierte Zeichenfolge an die Konsole zu drucken. print Funktion findet das erste Nullzeichen in Ihrer Zeichenfolge und endet. Verwenden Sie binascii.hexlify zu wandeln es in dem hex:


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

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

Anstatt dass * schrecklich * benannte Funktion in binascii, 'repr()' könnte sein, mehr hier nützlich. –

+0

@Yurymik sagt das '(16)' Argument, dass es in 16 Bytes liest, oder dass es es in Einheiten von 16 Bits liest? – AllTradesJack

+1

@joshsvoss: file.read ([Größe]) Lesen Sie maximal Größe Bytes aus der Datei (weniger, wenn der Lese EOF vor dem Erhalten von Größe Bytes erreicht). https://docs.python.org/2/library/stdtypes.html – yurymik

5

Sie müssen wahrscheinlich den offenen Modus binär setzen:

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

Siehe this similar question für eine gründlichere Beschreibung.

Verwandte Themen