如何在Python中逐字节读取文件并以二进制方式打印字节列表?

37 投票
5 回答
157587 浏览
提问于 2025-04-15 22:56

我想逐个字节地读取一个文件,但我不太确定该怎么做。我是想这样做的:

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或更高版本。

撰写回答