Hi all, I have a .bin file which python just won't play ball with- Does anyone know what I'm doing wrong- is it simply incompatible?
I've read it fine using a C program - its 113 doubleword fields- apparently its possible to handle these in python in a very similar way to C. I can provide the c code and have attached .bin if anyone is interested... Thank you all. It imports as a string of rubbish... i.e. <open file 'data.bin', mode 'rb' at 0x5a2a8> >>> text = f.read() >>> print text ?F?C??y??>? @[EMAIL PROTECTED]@???????????????????/???8@@@@[EMAIL PROTECTED]/[EMAIL PROTECTED]@?????Q???Q???Q???Q???Q??Ǒ????????R[???Q??????? It won't unpack using struct... >>> unpack('d', text) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/struct.py", line 87, in unpack return o.unpack(s) struct.error: unpack requires a string argument of length 8 Using str and repr gets me something that looks like unicode... >>> str(text) '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \xa0F\xa2C\xc0\xd2y\xf9\xf8>[EMAIL PROTECTED]@\x00\x00\x00\x 00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00g[\xa0?B8~\xd4\x00\x00\x00 \x00\x00\x00\xf8\xff\x00\x00\x00\x00\x00\x00\xf8\xff\x00\x00\x00\x00\x00\x00\x0 0\x00\x00\x00\x00\x00\x00\x00\ etc..... Tried formatting it... >>> str(text) % ('Python', 'g') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: not all arguments converted during string formatting Tried converting it to unicode... >>> unicode(text, 'utf8', 'strict') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/encodings/utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True) UnicodeDecodeError: 'utf8' codec can't decode byte 0xa0 in position 19: unexpected code byte I even tried chopping it up into 8 character pieces and then converting it into a float, but I think I'm just being stupid by this point... >>> the_list=[] >>> index = 0 >>> second_dig = 7 >>> while index < (len(bum))/8: ... new_bit = bum[index:second_dig] ... the_list.append(new_bit) ... index += 8 ... second_dig += 8 ... >>> print the_list [u'\x00\x00\x00\x00\x00\x00\x00', u'\x00\x00\x00\x00\x00\x00\x00', u'\x00\x00\x00\ufffdF\ufffdC', u'[EMAIL PROTECTED]', u'[EMAIL PROTECTED]', u'\x00\x00\x00\x01\x00\x00\x00', u'\x00\x00g[\ufffd?B', u'~\ufffd\x00\x00\x00\x00\x00', u'\x00\x00\x00\ufffd\x00\x00\x00', u'\x00\x00\x00\x00\x00\x00\x00', u'\x00\x00\x00\x00\x00\x00\x00', u'\x00\x00\x00\x00\x00\x00\x00', u'\x00\x00\x00\x00\x00\x00\x00'] >>> the_list[1] u'\x00\x00\x00\x00\x00\x00\x00' >>> float(the_list[1]) Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'decimal' codec can't encode character u'\x00' in position 0: invalid decimal Unicode string Any ideas?
data.bin
Description: data.bin
-- http://mail.python.org/mailman/listinfo/python-list