Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用ZipFile中的ImageIO处理文件_Python_Zipfile - Fatal编程技术网

Python 使用ZipFile中的ImageIO处理文件

Python 使用ZipFile中的ImageIO处理文件,python,zipfile,Python,Zipfile,尝试使用imageio从zipfile读取图像文件时出错: import zipfile import glob import imageio from os.path import splitext for database in glob.iglob('Datasets/*.zip'): print(database) zf = zipfile.ZipFile(database, 'r') for file in zf.namelis

尝试使用imageio从zipfile读取图像文件时出错:

import zipfile
import glob
import imageio
from os.path import splitext

    for database in glob.iglob('Datasets/*.zip'):
        print(database)
        zf = zipfile.ZipFile(database, 'r')
        for file in zf.namelist():
            basename,extension = splitext(file)
            if extension == '.png':
                img = imageio.imread(file)
                print(img.shape, end='')
以下是回溯:

Datasets/first.zip
Traceback (most recent call last):
  File "testZip.py", line 12, in <module>
    img = imageio.imread(file)
  File "/usr/local/anaconda3/lib/python3.6/site-packages/imageio/core/functions.py", line 200, in imread
    reader = read(uri, format, 'i', **kwargs)
  File "/usr/local/anaconda3/lib/python3.6/site-packages/imageio/core/functions.py", line 117, in get_reader
    request = Request(uri, 'r' + mode, **kwargs)
  File "/usr/local/anaconda3/lib/python3.6/site-packages/imageio/core/request.py", line 120, in __init__
    self._parse_uri(uri)
  File "/usr/local/anaconda3/lib/python3.6/site-packages/imageio/core/request.py", line 252, in _parse_uri
    raise IOError("No such file: '%s'" % fn)
OSError: No such file: 'first/image_7395.png'
[Finished in 0.2s with exit code 1]
Datasets/first.zip
回溯(最近一次呼叫最后一次):
文件“testZip.py”,第12行,在
img=imageio.imread(文件)
imread中的文件“/usr/local/anaconda3/lib/python3.6/site packages/imageio/core/functions.py”,第200行
reader=read(uri,格式为'i',**kwargs)
文件“/usr/local/anaconda3/lib/python3.6/site packages/imageio/core/functions.py”,第117行,在get_reader中
请求=请求(uri,'r'+模式,**kwargs)
文件“/usr/local/anaconda3/lib/python3.6/site packages/imageio/core/request.py”,第120行,在__
自我解析uri(uri)
文件“/usr/local/anaconda3/lib/python3.6/site packages/imageio/core/request.py”,第252行,在
raise IOError(“没有这样的文件:'%s'”%fn)
OSError:没有这样的文件:“first/image_7395.png”
[在0.2秒内完成,退出代码为1]
有人有线索吗


谢谢文件
变量包含文件名,而不是实际的文件数据。错误很明显:磁盘上不存在名为
first/image7395.png
的文件,但它在zip中。您需要从zip中提取文件,并将提取的文件用于
imageio
。例如:

for database in glob.iglob('Datasets/*.zip'):
    print(database)
    zf = zipfile.ZipFile(database, 'r')
    for file in zf.namelist():
        basename,extension = splitext(file)
        if extension == '.png':
            ofile = zf.extract(file)
            img = imageio.imread(ofile)
            print(img.shape, end='')
            # if you need to:
            os.remove(ofile)
# ...
if extension == '.png':
    with zf.open(file) as img_file:
        img = imageio.read(img_file)
编辑:看起来imageio也可以从类似文件的对象中读取,在这种情况下,您可以使用ZipFile.open()并将其传递给imageio。例如:

for database in glob.iglob('Datasets/*.zip'):
    print(database)
    zf = zipfile.ZipFile(database, 'r')
    for file in zf.namelist():
        basename,extension = splitext(file)
        if extension == '.png':
            ofile = zf.extract(file)
            img = imageio.imread(ofile)
            print(img.shape, end='')
            # if you need to:
            os.remove(ofile)
# ...
if extension == '.png':
    with zf.open(file) as img_file:
        img = imageio.read(img_file)

您正在尝试按名称从ZIP打开图像<代码>图像IO
不知道怎么做。它假定您为它提供了一个真实的文件路径。您需要通过首先在zip中打开文件来为其提供一个file对象。你也可以像@randomdude999建议的那样先提取它

for file in zf.namelist():
    basename,extension = splitext(file)
    if extension == '.png':
        img = imageio.imread(zf.open(file))
        print(img.shape, end='')

什么是回溯错误?好的,进一步研究它,它与我后来做的操作有关:img=imageio.imread(文件)我要更新opo谢谢。这就解释了是的。我希望找到一种方法来读取Zip文件中的文件并对其进行处理。这是在zip文件中工作的最佳方式吗?再次谢谢你看到我的评论了吗?听起来像是你想要的。我不想提取文件。你编辑,kichik评论就可以了,谢谢。这正是我希望做的。谢谢不幸的是,我现在有一个新的错误:OSError:在获取firstbytes后无法查找回!你知道这是什么意思吗?(与前面的行相同)看起来流不兼容,因为imageio需要查找。您必须将其解压缩到文件或内存中(imread接受字节iirc,如果不使用StringIO)。除了ZipFile之外,你知道有哪个库可以给我一个Zip中文件的虚拟文件句柄吗?