我正在使用Python,我有几个图像目录,我想转换为.gz文件,所以我可以按照千篇一律的教程。本教程使用存储在单个.gz文件中的训练图像。我试图将我的图像目录转换为.gz,这样我就可以模拟教程代码并更好地理解它。
特别是,我试图了解在Dr. LeCun's website找到的train-images-idx3-ubyte.gz
等MNIST .gz文件的格式。
我可以将单个图像转换为.gz
,但不能转换为目录。我的在线搜索表明这应该是预期的。如何创建包含多个训练图像信息的.gz
文件?
如果您需要更多信息,或者我提出错误的问题或朝着不明智的方向前进,请告诉我。感谢。
答案 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压缩,这将适用于任何操作系统。