2014-02-25 94 views
0

我有一個二進制文件,我想讀取數據,一次一個字節,打印每個字節,因爲它運行。Python:讀取和打印一個二進制文件

我到目前爲止的代碼是:

f = open("test.dat", "rb") 
try: 
    byte = f.read(1) 
    while byte != "": 
     print byte 
     raw_input("Press Enter to continue...") 
     byte = f.read(1) 
finally: 
    f.close() 

然而,這不是給我預期的結果。基本上,我想打印出每個字節0到127之間的數字。但是,第一次印刷給我一個笑臉符號,我知道它不在ASCII的前128個條目中。因此,看起來我打印的不僅僅是一個字節 - 即使我只指定讀取f.read中的1個字節。

這是怎麼回事?

謝謝。

+0

'print ord(byte)'的輸出是什麼? – moooeeeep

+1

順便說一下,不要在這裏使用'try/finally',使用['with'語句](http://docs.python.org/2/reference/compound_stmts.html#the-with-statement)。 –

回答

6

笑臉是Windows codepage-850的人物1(白臉)或2(黑臉),所以這一切都OK。

enter image description here

如果你要打印數量,只需用

print ord(byte) 
+0

謝謝,這很好。但我只是想知道ord(byte)和int(byte)之間的區別是什麼?謝謝。 – Karnivaurus

+0

你試過了嗎? 'int(byte)'只適用於'byte'是通過'「9」''的字符''0''之一​​。 –

2

什麼read(1)回報是單字符的字符串。嘗試:

print ord(byte[0]) 

或者也可以做

print ord(byte) 

如Python有沒有獨立的字符類型,ord()作品與單字符的字符串。