zip大文件在linux下解压数据受损的补救方案——以SPAQ数据集为例

背景

由于SPAQ.zip是大文件,在linux中无法直接unzip解压,所以作者将SPAQ分卷压缩。但即使这样,仍然可能出现数据受损的情况。我记录了大文件解压后遇到的问题和解决办法,希望能帮助到你。

github地址:Giselle0707/SPAQ: CVPR2020 Official SPAQ & Implementation. Addition: dataset unzip problem and solution. (github.com)

如何在linux中解压分卷呢?

  1. 前提

    所有*.z*文件(包括.zip)都已经被放在linux文件夹下。

  2. 解压指令

shell 复制代码
    zip -FF SPAQ.zip --out SPAQ_fixed.zip
    unzip SPAQ_fixed.zip

可能遇到的问题和解决办法

  1. python程序在图像处理过程中报错:"OSErr"

    经过排查,我发现部分图像出现了图像数据部分丢失的情况,这部分图像在被 convert 成 RGB 图像时会丢出 OSErr。人工检查数据集中哪些图像有误是不实际的,所以我写了两段 python 代码分别用于检查损坏的图像和另存一份需要重新上传的未损坏的图像。你需要在linux设备上运行 OutputErrorImages.py,并把它的输出复制后保存到你本地设备的 demagedImgs.txt 文件中。接着,在你的本地设备运行 pickImage.py,以将未损坏的图像保存到 updated 文件夹中,以便于你进一步将这些图像重新上传到 linux 终端。

Codes

For directly apply my codes, your dir tree should be like this:

python 复制代码
### OutputErrorImages.py
### This file is to Test which image is be demaged, and print their name in console. You should copy the output and paste them at your local device as "demagedImgs.txt" and run 'python pickImage.py'.

import os
import os.path
from openpyxl import load_workbook
import torchvision
from torchvision.transforms import transforms
from PIL import Image
import scipy.io
import xlrd
from tqdm import tqdm

## DEFINE Args
root = "" # your SPAQ dataset location
index = list(range(0, 11125))
transform = transforms = torchvision.transforms.Compose([
     torchvision.transforms.ToTensor()])

## START loading SPAQ dataset
data = xlrd.open_workbook(os.path.join(root, 'Annotations/MOS and Image attribute scores.xlsx'))
table = data.sheet_by_index(0)

for rowNum in tqdm(range(table.nrows)):
    if rowNum > 0:
        rowValue = table.row_values(rowNum)
        # acquire imgnames, convert them into RGB. If OSErr was throw, then print their name for record.
        try:
            sample = pil_loader(os.path.join(root, 'TestImage', rowValue[0]))
        except OSError as e:
            print(os.path.join(root, 'TestImage', rowValue[0]))
print("Success")
python 复制代码
### pickImage.py 
# This file is to copy the undemaged images into dst dir, for use to re-upload these images.

import os
from PIL import Image
import os.path
import shutil

dst = "./updated/" # image folder which should contains the indamaged images correspponding to the demaged images.
file_name = "demagedImgs.txt"

def openreadtxt(file_name):
    file = open(file_name,'r')  
    file_data = file.readlines() 
    for row in file_data:
        row = row.strip('\n')
        shutil.copy(f"TestImage/{row}", dst)

openreadtxt(file_name)
print("Success")
shell 复制代码
### data transfer tool
### This command is for those whose devide could run linux command. I prefer to transfer data through scp command than using APP SFTP. Window user could run this file in "git bash"!
scp -r -P 22 ./updated.zip user@xx.xx.xx.xx:/dst_location
相关推荐
2601_96035638几秒前
组织效能岗位需要掌握哪些数据分析、BI和HR数字化工具
数据挖掘·数据分析
2601_962293248 小时前
Python自动化统计团队工作量并生成可视化仪表盘的脚本方案【指导】
python·数据分析·自动化·可视化·仪表盘
徐小黑ACG10 小时前
nginx配置文件
linux·服务器·nginx
新时代牛马10 小时前
Linux VFS 完整篇:从path_openat、dentry/inode 到page cache 与挂载排障
linux·运维·服务器
airank10 小时前
2026年GEO服务商选型指南:系统梳理服务商分类框架、主流服务商能力横评、企业级选型六大维度及避坑要点,帮助企业在AI搜索时代做出科学决策。
大数据·人工智能·数据分析·aigc
java_logo10 小时前
Docker 部署 Rocky Linux:轻松搭建 RHEL 兼容企业级基础镜像平台
linux·docker·容器·rocky linux·基础镜像·轩辕镜像·rhel 兼容
拂拉氏10 小时前
【知识讲解】 Linux虚拟地址空间认识
linux·虚拟地址空间
新时代牛马12 小时前
Linux 驱动中断与定时完整篇:从 request_threaded_irq 到hrtimer 选型与排障
linux·运维·服务器
分支预测失败14 小时前
RISC-V 核间中断 IPI 实战:从 MSIP 寄存器到 IMSIC 消息投递
linux·后端
GeW15 小时前
RHCE考试避坑指南"90%考生容易忽略的细节
linux