Why can I not read more than 16 bytes of a JPEG file in Python?
Solution 1
Two issues here:
Set read mode to binary. This way
file.read
function won't try to convert '\r\n' sequences.You're trying to print NULL-terminated string to the console.
print
function finds first zero character in your string and terminates. Usebinascii.hexlify
to convert it to the hex:
f = open("test.jpg", "rb")
ima = f.read(16)
print "%s" % (binascii.hexlify(ima))
Solution 2
You probably need to set the open mode to binary:
f = open("test.jpg", "rb") # 'rb' here means "read mode, binary"
See this similar question for a more thorough description.
andrepcg
Informatics Engineering Student @ University of Coimbra
Updated on February 15, 2020Comments
-
andrepcg about 4 years
I am trying to read a JPG image in Python.
So far i have:
f = open("test.jpg") ima = f.read(16) print "'%s'"% (ima)
It reads 16 bytes and displays the string in console, but it looks like I cannot display more than 32 bytes. Why?
When it tries to read 32 or more bytes, the output will be the same as when it read 16 bytes. Why can I not read more than 16 bytes of the jpeg image?
-
Greg Hewgill over 13 yearsRather than that horribly named function in binascii,
repr()
might be more useful here. -
AllTradesJack almost 10 years@yurymik does the
(16)
argument mean it reads in 16 bytes, or that it reads it in units of 16 bits? -
yurymik over 9 years@joshsvoss: file.read([size]) Read at most size bytes from the file (less if the read hits EOF before obtaining size bytes). docs.python.org/2/library/stdtypes.html
-
kkk over 8 yearsuse f.read() to read the complete file , no need to find the size of the file or loop over f.readline() to see the output of everyline