python - 有效地将二进制数据嵌入脚本

标签 python bash binaryfiles

我看过一些类Unix系统的安装文件(很大,比如Matlab或者Mathematica的install.sh),里面一定嵌入了相当多的二进制数据,比如图标、声音、图形等等, 进入剧本。我想知道如何做到这一点,因为这可能有助于简化文件结构。

我对使用 Python 和/或 Bash 执行此操作特别感兴趣。

我所知道的 Python 中的现有方法:

  1. 只需使用字节字符串:x = b'\x23\xa3\xef' ...,效率极低,100KB 的 wav 文件需要半 MB。
  2. base64,比选项 1 好,大小扩大了 4/3 倍。

我想知道是否有其他(更好的)方法可以做到这一点?

最佳答案

如果适合您的数据(例如,如果您没有嵌入已经压缩的数据),您可以使用 base64 + 压缩(例如使用 bz2)。

例如,要创建您的数据(假设您的数据由 100 个空字节和 200 个值为 0x01 的字节组成):

>>> import bz2
>>> bz2.compress(b'\x00' * 100 + b'\x01' * 200).encode('base64').replace('\n', '')
'QlpoOTFBWSZTWcl9Q1UAAABBBGAAQAAEACAAIZpoM00SrccXckU4UJDJfUNV'

并使用它(在您的脚本中)将数据写入文件:

import bz2
data = 'QlpoOTFBWSZTWcl9Q1UAAABBBGAAQAAEACAAIZpoM00SrccXckU4UJDJfUNV'
with open('/tmp/testfile', 'w') as fdesc:
    fdesc.write(bz2.decompress(data.decode('base64')))

关于python - 有效地将二进制数据嵌入脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27601972/

相关文章:

performance - rust 去污牛哈希集

python - 在 python 中写入二进制输出最有效的方法是什么?

python - 在 C 程序中嵌入 Python 模块时,如何将 C 结构传递到 Python 中

regex - 尝试匹配字符串并将其添加到替换中

python - 如何在 Python 中存储条件列表?

bash - 如何在pycharm中远程执行bash脚本?

bash - 配置命令未找到 cygwin

c++ - 从二进制文件读取后出现奇怪的数字

python - 通过 pyCharm windows 8 安装 scipy 时遇到问题 - 找不到 lapack/blas 资源

使用 wheel 文件的 python Pip 安装不起作用