如何在Python中逐字节读取文件并以二进制方式打印字节列表?
我想逐个字节地读取一个文件,但我不太确定该怎么做。我是想这样做的:
file = open(filename, 'rb')
while 1:
byte = file.read(8)
# Do something...
这样做会让变量 byte 在每次循环开始时包含接下来的8个比特吗?这些字节的具体内容其实并不重要。重要的是我需要以8位为单位来读取文件。
编辑:
另外,我把这些字节收集到一个列表里,我想打印出来的时候,不希望它们显示成 ASCII 字符,而是以原始字节的形式显示。也就是说,当我打印这个字节列表时,结果应该是:
['10010101', '00011100', .... ]
5 个回答
19
你展示的代码会读取8个字节。你可以使用
with open(filename, 'rb') as f:
while 1:
byte_s = f.read(1)
if not byte_s:
break
byte = byte_s[0]
...
44
要读取一个字节:
file.read(1)
8个比特位就是一个字节。
19
关于你问题的第二部分,如果想把数字转换成二进制,可以使用一种叫做格式字符串的东西,还有一个叫做 ord
的函数。
>>> byte = 'a'
>>> '{0:08b}'.format(ord(byte))
'01100001'
需要注意的是,这种格式会在前面加上合适数量的零,这正是你需要的功能。这个方法需要使用Python 2.6或更高版本。