2012-08-07 61 views
1

我對python非常陌生,使用python 2.7。我必須讀入二進制文件,然後將一些字節連接在一起。所以我試了從python列表中訪問二進制數據時出錯

f = open("filename", "rb") 
j=0 
infile = [] 
try: 
    byte = f.read(1) 
    while byte != "": 
     infile.append(byte) 
     byte = f.read(1) 
finally: 
    f.close() 
blerg = (bin(infile[8])<<8 | bin(infile[9])) 
print type 

我意識到重鑄爲二進制可能是不必要的,但這是我以後的嘗試之一。

我得到的錯誤是TypeError:'str'對象不能被解釋爲索引。 這是我的新聞,因爲我沒有在任何地方使用字符串。我做錯了什麼!@#%?

編輯:完整回溯 文件binaryExtractor.py 25行,在 blerg =(倉(infile中[8])< < 8 |倉(infile的[9])) 類型錯誤: 'STR' 對象不能解釋爲索引

+1

請發佈完整的回溯。此外,代碼中的縮進也是關閉的。 'type'是內建函數(或內建類型),所以最好不要將它用作變量名稱。 – 2012-08-07 20:17:29

+0

「因爲我沒有使用任何字符串」:'bin'返回一個字符串,雖然。 – DSM 2012-08-07 20:23:02

+0

http://mywiki.wooledge.org/XyProblem – 2012-08-07 20:23:59

回答

1

想要使用ord函數,該函數返回單個字符串中的整數,而不是返回二進制數的字符串表示形式的bin

+0

哎呀,希望你在我申請忍者修復之前沒有看到這個答案。 – 2012-08-07 20:29:57

+0

我做到了。然後我刷新了它,非常高興。 – bigbenbt 2012-08-07 20:32:12

2

您應該儘可能使用struct而不是爲此編寫自己的代碼。

>>> struct.unpack('<H', '\x12\x34') 
(13330,)