python 使用 gzip 或 zlib 压缩多个数据

python compressing multiple data using gzip or zlib

假设我有多个数据:比如 3 python arrays(或 numpy arrays)和 2 个字符串列表。

如何将压缩二进制格式的每个数据存储在同一个 zip 文件中?

我查看了 https://docs.python.org/3.4/library/gzip.html 上的文档,示例仅展示了如何编写使用 gzip.open 打开文件并使用 writelines 写出单个数据的单个数据数据。

我正在使用 Python 3.4

要将多个文件放入 gzip 文件中,请使用 tarfile.open with a mode of w:gz. Then you can use the addfile 方法将序列化对象放入其中(使用 StringIO 作为 fileobj)。

import numpy
np_array_data = numpy.zeros(100)
list_of_strs = ['abc'] * 100

import io
import pickle

np_array_data = io.BytesIO()
numpy.save(np_array_data, np_array)
np_array_data.seek(0)
str_data = io.BytesIO()
pickle.dump(list_of_strs, str_data)
str_data.seek(0)
with tarfile.open('output.tar.gz', mode='w:gz') as dest_file:
    dest_file.addfile(tarfile.TarInfo('np_data'), np_array_data)
    dest_file.addfile(tarfile.TarInfo('str_data'), str_data)

如果你只想将一些numpy数组放入一个压缩文件中,你可以只使用numpy.savez_compressed.