Why can I not read more than 16 bytes of a JPEG file in Python?

21,506

Solution 1

Two issues here:

  1. Set read mode to binary. This way file.read function won't try to convert '\r\n' sequences.

  2. You're trying to print NULL-terminated string to the console. print function finds first zero character in your string and terminates. Use binascii.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.

Share:
21,506
andrepcg
Author by

andrepcg

Informatics Engineering Student @ University of Coimbra

Updated on February 15, 2020

Comments

  • andrepcg
    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
    Greg Hewgill over 13 years
    Rather than that horribly named function in binascii, repr() might be more useful here.
  • AllTradesJack
    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
    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
    kkk over 8 years
    use 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