2011-01-12 12 views
5

Python'da bir JPG görüntüsü okumaya çalışıyorum.Python'da bir JPEG dosyasının 16 baytından fazlasını neden okuyamıyorum?

Şimdiye kadar sahip olduğum:

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

print "'%s'"% (ima) 

O 16 bayt okur ve konsolda dizesini görüntüler, ancak ben fazla 32 bayt gösteremez gibi görünüyor. Niye ya?

32 veya daha fazla bayt okumaya çalıştığında, çıktı 16 bayt okuduğunda aynı olur. Neden jpeg görüntüsünün 16 baytından fazlasını okuyamıyorum?

cevap

11

iki konu: ikili

  1. Seti okumak modu. Bu şekilde file.read işlevi '\ r \ n' dizilerini dönüştürmeyi denemez.

  2. NULL sonlandırılmış dizeyi konsola yazdırmaya çalışıyorsunuz. print işlevi dizginizdeki ilk sıfır karakteri bulur ve sonlandırır. onaltılık dönüştürmek için binascii.hexlify kullanın:


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

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

Aksine bundan daha * korkunç * binascii adlı fonksiyon, 'repr()' Burada daha yararlı olabilir. –

+0

@yurymik, 16 baytta okuduğu anlamına gelen (16) argümanı ya da 16 bitlik bir birim halinde okuduğunu gösterir mi? – AllTradesJack

+1

@joshsvoss: file.read ([size]) Dosyadan en büyük boyutlu baytları oku (okuma boyutu, boyut baytlarını almadan önce EOF'ye ulaşırsa daha az). https://docs.python.org/2/library/stdtypes.html – yurymik

5

Muhtemelen ikili açık modunu ayarlamak gerekir:

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

daha ayrıntılı açıklaması için this similar question bakınız. Burada