2011-01-12 34 views
5

Tôi đang cố đọc một hình ảnh JPG bằng Python.Tại sao tôi không thể đọc hơn 16 byte của tệp JPEG bằng Python?

Cho đến nay tôi có:

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

print "'%s'"% (ima) 

Nó đọc 16 byte và hiển thị các chuỗi trong giao diện điều khiển, nhưng có vẻ như tôi không thể hiển thị nhiều hơn 32 byte. Tại sao?

Khi cố đọc 32 byte trở lên, đầu ra sẽ giống như khi đọc 16 byte. Tại sao tôi không thể đọc hơn 16 byte của hình ảnh jpeg?

Trả lời

11

Hai vấn đề ở đây:

  1. Set đọc chế độ nhị phân. Bằng cách này, hàm file.read sẽ không cố chuyển đổi các chuỗi '\ r \ n'.

  2. Bạn đang cố in chuỗi kết thúc NULL vào bảng điều khiển. Hàm print tìm ký tự đầu tiên bằng không trong chuỗi của bạn và kết thúc. Sử dụng binascii.hexlify để chuyển đổi nó sang hex:


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

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

Thay vì đó * khủng khiếp * tên hàm trong binascii, 'repr()' có thể có ích hơn ở đây. –

+0

@yurymik làm đối số '(16)' có nghĩa là nó đọc 16 byte, hoặc đọc nó theo đơn vị 16 bit? – AllTradesJack

+1

@joshsvoss: file.read ([size]) Đọc ở hầu hết các byte kích thước từ tệp (ít hơn nếu lần đọc đọc EOF trước khi nhận byte kích thước). https://docs.python.org/2/library/stdtypes.html – yurymik

5

Bạn có thể cần phải thiết lập các chế độ mở để nhị phân:

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

Xem this similar question cho một mô tả kỹ lưỡng hơn.

Các vấn đề liên quan