Python 如何提取多个.zip文件?

Python 如何提取多个.zip文件?,python,zip,data-extraction,Python,Zip,Data Extraction,我正在尝试从一些.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"):

我正在尝试从一些.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。怎么了?

我认为这种情况可能是一种严重的可能性

发生的情况是,对于每个.zip文件,其所有成员都会被提取,但它们会覆盖从上一个文件提取的成员(当然,除了第一个)。因此,在最后,您将得到枚举的最后一个存档中的文件
要解决此问题,应将每个.zip文件成员解压到单独的目录中(即.zip文件名)

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

code.py:

#/usr/bin/env蟒蛇3
导入操作系统
导入glob
进口拉链
dir_name_base=“/home/marlon/Shift One/Projeto Philips/Consolidaão de Arquivos”
对于glob.iglob(os.path.join(dir\u name\u base,*.zip))中的arc\u名称:
arc_dir_name=os.path.splitext(os.path.basename(arc_name))[0]
zf=zipfile.zipfile(弧名称)
zf.extractall(path=os.path.join(dir\u name\u base,“dados”,arc\u dir\u name))
zf.close()#提取完成后关闭文件

我使用的是Python 3.6,可能与@aaz重复,是否收到错误消息?若你们得到了错误,那个么把它添加到问题中(而不是评论中)。首先,您可以使用
print()
检查
f
中的值-可能文件的扩展名是“.ZIP”,而不是
.ZIP
。您还可以检查
语句中的代码是否已执行。您还可以检查.zip文件中的文件是否有不同的名称-它可能会将一个文件写入另一个文件。@furas没有错误消息。我把它打印出来,然后放了一个.zip存档。有九个。或者您可能有扩展名为
.Zip
的文件-对于Linux和Python(以及任何其他编程语言和程序),它的扩展名不同于
.Zip
.Zip
。你必须检查
f.lower().endswith(“.zip”)
我想你还不太清楚,毕竟你设法列举了档案并提取了它们的内容。。。。碰巧内容是一样的:)让我问你一件事。我是个初学者,你可能已经看到了。“[0]”是什么意思?ThanksIt是列表的第一个元素(序列)。尝试在Python控制台中播放:
os.path.splitext(“file.txt”)
,然后
os.path.splitext(“file.txt”)[0]
,您将了解我的意思(您必须先导入os
)。