如何将图像目录转换为.gz?

时间:2016-04-27 00:05:51

标签: python gzip

我正在使用Python,我有几个图像目录,我想转换为.gz文件,所以我可以按照千篇一律的教程。本教程使用存储在单个.gz文件中的训练图像。我试图将我的图像目录转换为.gz,这样我就可以模拟教程代码并更好地理解它。

特别是,我试图了解在Dr. LeCun's website找到的train-images-idx3-ubyte.gz等MNIST .gz文件的格式。

我可以将单个图像转换为.gz,但不能转换为目录。我的在线搜索表明这应该是预期的。如何创建包含多个训练图像信息的.gz文件?

如果您需要更多信息,或者我提出错误的问题或朝着不明智的方向前进,请告诉我。感谢。

1 个答案:

答案 0 :(得分:2)

你做不到。 gzip是一种流压缩方法,它不是容器。在这种情况下,图像存储在文件容器中,该文件容器在页面底部描述:

  

IDX文件格式是各种数值类型的向量和多维矩阵的简单格式。   基本格式是   神奇的数字   尺寸为0   尺寸1   尺寸2   .....   尺寸N   数据

     

幻数是一个整数(MSB优先)。前2个字节始终为0.

     

第三个字节编码数据类型:   0x08:无符号字节   0x09:有符号字节   0x0B:短(2个字节)   0x0C:int(4字节)   0x0D:float(4个字节)   0x0E:double(8字节)

     

第4个字节编码向量/矩阵的维数:向量为1,矩阵为2 ....

     

每个维度的大小为4字节整数(MSB优先,高端,与大多数非英特尔处理器一样)。

     

数据存储在C数组中,即最后一维中的索引变化最快。

更典型的方法是使用tarball存档作为容器,然后压缩存档。这样做的好处是,这是创建gzip压缩存档的标准方法,并且不需要自定义脚本来提取文件。

如何使用给定的图像目录执行此操作的示例如下(在* Nix系统上使用Bash):

tar -zcvf tar-archive-name.tar.gz source-folder-name

Gzip压缩内置了-z标志,或者你也可以使用gzip命令自己做。

在Python中,您还可以使用gzip压缩创建tarfile存档:

documentation修改的一个简单示例如下:

import tarfile
tar = tarfile.open("sample.tar", "w:gz")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()

模式'w:gz'指定存档将被gzip压缩,这将适用于任何操作系统。