On 10 Sep, 18:14, Aaron Scott <[EMAIL PROTECTED]> wrote: > I've been trying to tackle this all morning, and so far I've been > completely unsuccessful. I have a binary file that I have the > structure to, and I'd like to read it into Python. It's not a > particularly complicated file. For instance: > > signature char[3] "GDE" > version uint32 2 > attr_count uint32 > { > attr_id uint32 > attr_val_len uint32 > attr_val char[attr_val_len] > > } ... repeated attr_count times ... > > However, I can't find a way to bring it into Python. This is my code > -- which I know is definitely wrong, but I had to start somewhere: > > import struct > file = open("test.gde", "rb") > output = file.read(3) > print output > version = struct.unpack("I", file.read(4))[0] > print version > attr_count = struct.unpack("I", file.read(4))[0] > while attr_count: > print "---" > file.seek(4, 1) > counter = int(struct.unpack("I", file.read(4))[0]) > print file.read(counter) > attr_count -= 1 > file.close() > > Of course, this doesn't work at all. It produces: > > GDE > 2 > --- > é > --- > ê Å > > I'm completely at a loss. If anyone could show me the correct way to > do this (or at least point me in the right direction), I'd be > extremely grateful.
What if we view the data as having an 11 byte header: signature, version, attr_count = struct.unpack('3cII', yourfile.read(11)) Then for the list of attr's: for idx in xrange(attr_count): attr_id, attr_val_len = struct.unpack('II', yourfile.read(8)) attr_val = yourfile.read(attr_val_len) hth, or gives you a pointer anyway Jon. -- http://mail.python.org/mailman/listinfo/python-list