如何在Python中获取二进制文件的所有比特并存入列表
将二进制文件的所有比特存入Python列表
嘿,你说得完全对——每个字节确实包含8个比特!Python本身确实没有直接读取比特的文件操作模式,但我们可以很轻松地把读取到的字节拆分成对应的比特序列,实现你想要的需求。
下面给你两种实用的实现方法,你可以根据自己的场景选择:
方法1:位运算拆分(高效适合大文件)
位运算的方式直接操作二进制数值,效率更高,处理大体积的二进制文件时优势明显:
with open("binaryfile.bin", "rb") as f: bytes_read = f.read() all_bits = [] for byte in bytes_read: # 从高位到低位依次取出每个比特(保证比特顺序和文件一致) for bit_pos in reversed(range(8)): # 右移目标比特到最低位,再用&1取出该比特的值(0或1) bit = (byte >> bit_pos) & 1 all_bits.append(bit)
代码解释:
reversed(range(8))是为了从字节的最高位(第7位)到最低位(第0位)依次取比特,这样得到的比特顺序和文件中实际存储的顺序完全一致。- 位运算
>> bit_pos将目标比特移动到最低位,&1则会保留最低位的数值(0或1),从而取出对应位置的比特。
方法2:字符串格式化拆分(简洁易读)
如果处理的文件不大,用字符串格式化的方式会更直观,代码也更简洁:
with open("binaryfile.bin", "rb") as f: bytes_read = f.read() all_bits = [] for byte in bytes_read: # 将字节格式化为8位二进制字符串,不足8位时自动在前面补0 bit_str = f"{byte:08b}" # 把字符串的每个字符转成整数,批量添加到列表中 all_bits.extend([int(bit_char) for bit_char in bit_str])
代码解释:
f"{byte:08b}"是Python的格式化语法,08b表示把数值转换为8位的二进制字符串,比如字节值为3时,会生成"00000011"。- 遍历二进制字符串的每个字符,转成整数0或1,再用
extend把这些整数批量添加到总列表里。
两种方法最终都会得到一个包含文件所有比特的列表all_bits,每个元素都是0或1,完全满足你的需求~
内容的提问来源于stack exchange,提问作者j v
相关产品推荐
相关产品推荐

