【发布时间】:2019-08-02 15:21:07
【问题描述】:
我在一个未压缩的 TAR 文件中有一个巨大的 jpg 图像数据集(200 万)。我还有一个txt文件,每一行都是TAR文件中图片的名字,顺序是。
img_0000001.jpg
img_0000002.jpg
img_0000003.jpg
...
和 tar 文件中的图像完全一样。
我搜索了很多,发现tarfile 模块是最好的模块,但是当我尝试使用name 从tar 文件中读取图像时,需要的时间太长。原因是,每次我调用getmemeber(name) 方法时,它都会调用getmembers() 方法扫描整个tar 文件,然后返回所有名称的Namespace,然后开始在这个Namespace 中查找。
如果有帮助,我的数据集大小是 20GB 单个 tar 文件。
我不知道最好先提取全部然后使用我的CustomDataset 中提取的文件夹或直接从存档中读取。
这是我用来从 tar 文件中读取单个文件的代码:
with tarfile.open('data.tar') as tf:
tarinfo = tf.getmember('img_000001.jpg')
image = tf.extractfile(tarinfo)
image = image.read()
image = Image.open(io.BytesIO(image))
我在 CustomDataset 类的 __getitem__ 方法中使用了这段代码,该方法循环了 filelist.txt 中的所有名称
感谢您的建议
【问题讨论】:
标签: python image-processing python-imaging-library pytorch tarfile