我看过一些类Unix系统的安装文件(很大,比如Matlab或者Mathematica的install.sh),里面一定嵌入了相当多的二进制数据,比如图标、声音、图形等等, 进入剧本。我想知道如何做到这一点,因为这可能有助于简化文件结构。
我对使用 Python 和/或 Bash 执行此操作特别感兴趣。
我所知道的 Python 中的现有方法:
- 只需使用字节字符串:
x = b'\x23\xa3\xef' ...
,效率极低,100KB 的 wav 文件需要半 MB。 - 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/