单个文件直接看最后复制代码!
先看代码:
# 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读取该文件,即可完成操作,都不用解压,厉害!