直接在python中以增量归档格式连接zip文件(在Colab中使用)



需要连接一些来自github的文件,这些文件由于大小而被分成几部分(如来自此数据集https://github.com/kang-gnak/eva-dataset)

使用request,这些最终在我的临时数据存储格式File_Name.zip.001File_Name.zip.007

完成的文件不是文本,而是图像,所以我还没有找到一个直接的方法来重建File_Name.zip从代码。

有人知道解决方案可以直接在Colab中工作吗?

?我正在寻找可重复性和共享我的代码作为Colab笔记本的能力,所以我试图避免涉及到必须在本地下载和重建文件并每次重新加载它的解决方案。如果有一种方法可以直接从代码中重新构建和解压缩文件,我也希望不必对现有数据进行在线复制。

提前感谢。

我尝试使用分配给

的部件文件名列表data_zip_parts

并运行以下代码:

with zipfile.ZipFile(data_path / "File_Name.zip", 'a') as full_zip:
for file_name in data_zip_parts:
part = zipfile.ZipFile(data_path / file_name, 'r')
for name in part.namelist():
full_zip.writestr(name, zipfile.open(name).read())

但是看起来这个文件格式不能直接读取,所以我得到以下错误:

BadZipFile: File is not a zip file

只是一个提醒,我想尝试直接在Google Colab中做到这一点:我问了一些同行,但他们中的大多数给了我解决方案,在我的本地系统上运行,如命令行或使用7zip,这不是我想要的,但我希望有一种方法可以绕过这种格式,并将感谢帮助。

了解问题

我从https://github.com/kang-gnak/eva-dataset下载了数据集,看看你在处理什么

$ ls -lh *
-rw-rw-r-- 1 paul paul  99M Oct  7 04:11 EVA_together.zip.001
-rw-rw-r-- 1 paul paul  99M Oct  7 04:11 EVA_together.zip.002
-rw-rw-r-- 1 paul paul  99M Oct  7 04:11 EVA_together.zip.003
-rw-rw-r-- 1 paul paul  99M Oct  7 04:11 EVA_together.zip.004
-rw-rw-r-- 1 paul paul  99M Oct  7 04:11 EVA_together.zip.005
-rw-rw-r-- 1 paul paul  99M Oct  7 04:11 EVA_together.zip.006
-rw-rw-r-- 1 paul paul  70M Oct  7 04:11 EVA_together.zip.007

让我们看看file命令对这些文件的内容是怎么说的

$ file *
EVA_together.zip.001: Zip archive data, at least v2.0 to extract, compression method=store
EVA_together.zip.002: data
EVA_together.zip.003: data
EVA_together.zip.004: data
EVA_together.zip.005: data
EVA_together.zip.006: data
EVA_together.zip.007: OpenPGP Public Key

正如我所料,实际上只有第一个看起来是zip文件,但即使它也有问题

$ unzip -t EVA_together.zip.001
Archive:  EVA_together.zip.001
End-of-central-directory signature not found.  Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive.  In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of EVA_together.zip.001 or
EVA_together.zip.001.zip, and cannot find EVA_together.zip.001.ZIP, period.

根源h1> 里的问题是由所有EVA_together.zip.001..组成的复合zip文件。EVA_together.zip.007文件只是一个大的zip文件的简单分割。

单独来看意味着没有这些文件是有效的格式良好的zip文件。都只是片段。

<标题>修复h1> 重新创建复合zip文件,您只需要连接各个部分
$ cat EVA_together.zip.00* >EVA_together.zip
$ ll -lh EVA_together.zip
-rw-rw-r-- 1 paul paul 664M Dec  6 09:31 EVA_together.zip

检查我们现在有一个有效的zip文件

$ file EVA_together.zip
EVA_together.zip: Zip archive data, at least v2.0 to extract, compression method=store
$ unzip -t EVA_together.zip
Archive:  EVA_together.zip
testing: EVA_together/            OK
testing: EVA_together/10021.jpg   OK
testing: EVA_together/100397.jpg   OK
...
testing: EVA_together/99711.jpg   OK
testing: EVA_together/99725.jpg   OK
testing: EVA_together/9993.jpg    OK
testing: EVA_together/9999.jpg    OK
No errors detected in compressed data of EVA_together.zip.

我相信colab允许shell转义,因此可能不需要在Python中编写连接代码。取决于你的工作流程

相关内容

  • 没有找到相关文章

最新更新