如何提取多个 .zip 文件?

Posted

技术标签:

【中文标题】如何提取多个 .zip 文件?【英文标题】:How can I extract multiple .zip files? 【发布时间】:2019-05-18 17:56:59 【问题描述】:

我正在尝试从一些 .zip 档案中提取多个文件。我的代码是:

import os
import zipfile

os.chdir('/home/marlon/Shift One/Projeto Philips/Consolidação de Arquivos')

for f in os.listdir("/home/marlon/Shift One/Projeto Philips/Consolidação de Arquivos"):
    if f.endswith(".zip"):
        z = zipfile.ZipFile(f, 'r')
        z.extractall(path = '/home/marlon/Shift One/Projeto Philips/Consolidação de Arquivos/dados')
        z.close()

但是,它只提取第一个存档中的文件。我正在使用 Python 3.6。怎么了?

【问题讨论】:

Unzip all zipped files in a folder to that same folder using Python 2.7.5的可能重复 @aaz 我正在使用 Python 3.6 您是否收到错误消息?如果您收到错误,请在有问题的地方添加它(不在评论中)。首先你可以使用print() 来检查f 中的值——也许文件有扩展名'.ZIP' 而不是.zip。您还可以检查 if 语句中的代码是否已执行。您还可以检查 .zip 文件中的文件是否具有不同的名称 - 它可能会用另一个文件覆盖一个文件。 @furas 没有错误消息。我打印了它,它只是输出了一个 .zip 存档。其中有九个。 或者您的文件可能具有像 .Zip 这样的扩展名 - 对于 Linux 和 Python(以及任何其他编程语言和程序),它的扩展名不同于 .zip.ZIP。你必须检查f.lower().endswith(".zip") 【参考方案1】:

我认为这种情况可能是一个严肃的候选者......

发生的情况是,对于每个 .zip 文件,它的所有成员都被提取,但它们会覆盖从前一个文件中提取的那些(嗯,除了 1st )。因此,最后,您将获得最后一个枚举档案中的文件。 要解决这个问题,您应该将每个 .zip 文件成员解压缩到一个单独的目录(.zip 文件名)。

以下是一个示例(我还稍微简化/清理了您的代码)。

code.py

#!/usr/bin/env python3

import os
import glob
import zipfile


dir_name_base = "/home/marlon/Shift One/Projeto Philips/Consolidação de Arquivos"

for arc_name in glob.iglob(os.path.join(dir_name_base, "*.zip")):
    arc_dir_name = os.path.splitext(os.path.basename(arc_name))[0]
    zf = zipfile.ZipFile(arc_name)
    zf.extractall(path=os.path.join(dir_name_base, "dados", arc_dir_name))
    zf.close() # close file after extraction is completed

【讨论】:

我想说你还没有走这么远,毕竟你设法枚举了档案并提取了它们的内容......只是碰巧内容是一样的:) 让我问你一件事。我是初学者,你可能已经看到了。 “[0]”是什么意思?谢谢 它是列表(序列)的第一个元素。尝试在 Python 控制台中玩:os.path.splitext("file.txt"),然后是os.path.splitext("file.txt")[0],你会明白我的意思(你必须先import os)。

以上是关于如何提取多个 .zip 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 HDFS 中解压缩多个 zip 文件

需要创建一个批处理文件以使用 winzip 可执行命令行提取 zip 文件夹并复制到多个位置

dedecms中提取的zip压缩文件操作类zip.class.php

如何在zip中的文件夹中提取文件?

如何在 Linux 中提取/解压缩这个多部分的 zip 文件?

如何在spark中解压和读取包含多个压缩文件的文件