Python如何读取二进制文件每第8个bit位并将内容写入新文件
提取二进制文件每第8个bit位的Python实现
实现思路
- 二进制文件的存储最小单位为字节,1字节等于8个bit,因此每第8个bit刚好对应每个字节的固定位置位,直接按字节遍历文件即可,不需要将整个文件读入内存,适合处理大文件
- 对每个读取到的字节,按位运算提取目标位,把收集到的8个目标位拼接成1个新字节,写入到新文件中
核心代码示例
# 配置参数:如果你的第8位是每个字节从左数(最高位)的第8位,就用掩码128(二进制10000000) # 如果是从右数(最低位)的第1位为计数起点,取第8位同样用128,若需调整目标位可修改掩码值 TARGET_BIT_MASK = 128 INPUT_FILE_PATH = "你的源二进制文件路径" OUTPUT_FILE_PATH = "输出的新文件路径" if __name__ == "__main__": bit_buffer = 0 bit_count = 0 with open(INPUT_FILE_PATH, "rb") as in_f, open(OUTPUT_FILE_PATH, "wb") as out_f: # 每次读1字节,逻辑清晰,大文件可调整为每次读1024字节减少IO次数 while byte := in_f.read(1): # 读取当前字节的目标bit位,得到0或者1 current_bit = (byte[0] & TARGET_BIT_MASK) != 0 # 把bit写入缓冲区 bit_buffer = (bit_buffer << 1) | current_bit bit_count += 1 # 凑够8个bit就写成1个字节写入文件 if bit_count == 8: out_f.write(bytes([bit_buffer])) bit_buffer = 0 bit_count = 0 # 最后如果剩下不足8个bit,可自行决定是否补0凑够8位写入,这里默认忽略
注意事项
- 要先确认你对
每第8个bit的计数规则:如果是把所有bit按从左到右的顺序数,第8、16、24...位的话,上面的掩码用128即可;如果计数规则不同,可调整掩码值或者字节读取顺序 - 如果需要保留最后不足8位的剩余bit,可以在循环结束后给bit_buffer左移补0到8位,再写入输出文件
内容的提问来源于stack exchange,提问作者neitche
相关产品推荐
相关产品推荐

