2014-02-25 59 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()作品与单字符的字符串。