You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现任意文件与二进制字符串互转无损坏的方法求助

Python实现任意文件与纯二进制字符串的互转

直接操作文件字节是最可靠的方式,可避免中间转十六进制时可能出现的补位错误。以下是完整的实现方案:

文件转纯二进制字符串

读取文件的二进制内容,将每个字节转换为8位二进制字符串(不足8位时左侧补零),最终拼接成完整的二进制字符串:

def file_to_binary_string(file_path):
    with open(file_path, 'rb') as f:
        bytes_data = f.read()
        # 每个字节转8位二进制,拼接结果
        binary_str = ''.join(format(byte, '08b') for byte in bytes_data)
    return binary_str

二进制字符串还原为文件

接收二进制字符串,按每8位分割转换为字节,再写入目标文件:

def binary_string_to_file(binary_str, output_path):
    # 校验长度合法性,避免还原出错
    if len(binary_str) % 8 != 0:
        raise ValueError("二进制字符串长度必须是8的倍数")
    
    # 按8位分组转字节
    bytes_data = bytes(int(binary_str[i:i+8], 2) for i in range(0, len(binary_str), 8))
    
    with open(output_path, 'wb') as f:
        f.write(bytes_data)

测试示例

# 转换文件为二进制字符串
binary_str = file_to_binary_string("test.jpg")
# 还原为文件
binary_string_to_file(binary_str, "test_restored.jpg")

关键说明

  • 必须使用format(byte, '08b')确保每个字节对应8位二进制,这是避免文件损坏的核心——如果高位补零缺失,还原后的字节值会完全错误,这很可能是你之前转十六进制再转二进制时出错的原因。
  • 处理大文件时,可改用分块读取减少内存占用:
    def file_to_binary_string_large(file_path, chunk_size=4096):
        binary_str = ''
        with open(file_path, 'rb') as f:
            while chunk := f.read(chunk_size):
                binary_str += ''.join(format(byte, '08b') for byte in chunk)
        return binary_str
    

内容的提问来源于stack exchange,提问作者Tanush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:32:50