Struct.Pack and Binary files

Grant Edwards grante at visi.com
Sun Jan 27 21:48:49 EST 2008


On 2008-01-28, PurpleServerMonkey <PurpleServerMonkey at gmail.com> wrote:
> Having trouble working out an appropriate format string for packing a
> binary file.
>
> The below is something I use for ASCII files but now I need something
> equivalent for working with binary files i.e jpg, zips etc.
>
> fileHandle = open("test.txt")
>
> while loop:
>             fileBuffer = fileHandle.read(512)
>             format = "!hh%dc" % len(fileBuffer)
>             outdata = struct.pack(format,  *fileBuffer)

Assuming fileBuffer has 512 bytes in it, your format string is
going to be "!hh512c".  When struct.pack sees that, it expects
514 values to pack.  You're only passing it 512.  What data do
you want to be packed into the two "h" fields?

You're also wasting a lot of CPU time unpacking and then
repacking the 512 bytes in filebufffer.  I suspect what you
want is:

   val1 = ???
   val2 = ???   
   outdata = format.struct("!hh", val1, val2) + fileBuffer

I don't know what val1 and val2 are supposed to be, since the
values that are to be packed as the two "h" fields seems to be
missing from your example code.

-- 
Grant




More information about the Python-list mailing list