Python 从zip压缩包中读取文件 / 图片

单个文件直接看最后复制代码!

先看代码:

# read video frames
frames = []
masks = []
for idx in ref_index:
    # 图像是在zip包里的,读取后转化为RGB格式的
    img = ZipReader.imread(
    	'{}/{}/JPEGImages/{}.zip'.format(
    				self.args['data_root'],
    				self.args['name'],
    				video_name),
    	all_frames[idx]).convert('RGB')
    img = img.resize(self.size)
    frames.append(img)
    masks.append(all_masks[idx])

仔细一看,其实是这句话起了作用:ZipReader.imread().

  • 第一个参数,zip文件的路径;
  • 第二个参数,从zip压缩包中要取的一个图像名字。

但是这不是官方定义的类函数,下面给出实现方法:

import zipfile # 导入官方库
import io

class ZipReader(object):
    file_dict = dict()

    def __init__(self):
        super(ZipReader, self).__init__()

    @staticmethod
    def build_file_dict(path):
    	# 将zip压缩包里的所有文件,构造成一个字典
        file_dict = ZipReader.file_dict
        if path in file_dict:
            return file_dict[path]
        else:
            file_handle = zipfile.ZipFile(path, 'r')
            file_dict[path] = file_handle
            return file_dict[path]

    @staticmethod
    def imread(path, image_name):
        zfile = ZipReader.build_file_dict(path)
        data = zfile.read(image_name)
        
        # io.BytesIO(a) 将字节对象转为Byte字节流数据,供Image.open使用
        im = Image.open(io.BytesIO(data))
        return im

可行有用代码

好了上面就是具体的实现手段,但是这里有另一个博主读取csv文件的,来看一下:

from zipfile import ZipFile
import pandas as pd
z = ZipFile('E:/archive.zip')
f = z.open('Train.csv')
train = pd.read_csv(f)
f.close()
z.close()

分析应该是Train.csv 文件在 E:/archive.zip 这个压缩包里面,然后直接用pandas读取该文件,即可完成操作,都不用解压,厉害!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值