Adr*_*ida 2 python decode file scikit-image
我正在对Kaggle进行CIFAR挑战.
他们给了一个包含5万张图片的.7z文件作为火车.我花了1个小时解压缩它然后再花40分钟读取所有文件并将其放在内存中.
试图不创建50k文件,因为这是这个的瓶颈,我已经安装了pylzma和其他库,但所有这些都会告诉我该文件无效.
来自bash的7z可以正确读取文件,并列出文件.所以我使用Popen了解压缩所有文件并使用bash 7z程序将它放在内存中的字符串中
import subprocess
p = subprocess.Popen(["7z", "e", "-so", "awa.7z"], stdout=subprocess.PIPE).communicate()[0]
Run Code Online (Sandbox Code Playgroud)
我已经设法通过查看其大小,然后从字符串中获取适当的字节来单独获取每个文件
f1 = p[0][0:2105]
Run Code Online (Sandbox Code Playgroud)
我现在想要的是欺骗Python认为F1文件指针,这样我就可以调用skimage.io.imread并将它转换为适当的结构.或者也许只是将内存值传递给skimage,它会为我转换它.
虽然skimage.io.imread的doc说第一个参数是filename的字符串,但我发现它也接受类似文件的对象(版本为0.10.0的skimage).
所以你可以将图像数据读入内存,如下所示:
from StringIO import StringIO
with open(filename) as f:
img_data = f.read()
decoded_img_data = skimage.io.imread(StringIO(img_data))
print decoded_img_data
>> OUTPUT:
array([[[235, 230, 234],
[233, 228, 232],
[231, 226, 230],
...,
Run Code Online (Sandbox Code Playgroud)