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?

Attachment: data.bin
Description: data.bin

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to