如何使用 python 提取封闭的 zip

Posted

技术标签:

【中文标题】如何使用 python 提取封闭的 zip【英文标题】:How can I extract a closed zip with python 【发布时间】:2017-01-27 07:53:07 【问题描述】:

我正在尝试使用 ZipFile 模块提取一个封闭的 zip,但是:

“open()、read() 和 extract() 方法可以采用文件名或 ZipInfo 对象。”

def ExtractZip(zipFile, path):
   zipfile.ZipFile.open(zipFile, 'r')
   zipFile.extractall(path)

这是我的代码,它返回一个错误。 (在使用.close() 运行此功能之前,我关闭了一个压缩文件,但我无法删除它) 我该怎么做? 谢谢

【问题讨论】:

哪个python版本? 2.7 python版本 “关闭”的 ZIP 文件是什么意思? 【参考方案1】:

假设你的文件是Archive.zip:

然后,这样做:

import zipfile
f = zipfile.ZipFile('Archive.zip')
f.extractall()

就是这样。如果要将内容放在其他位置,还可以为 extractall 提供可选的 path 参数。

更多信息可以在 Python 文档here 中找到。

【讨论】:

不回答 OP 问题【参考方案2】:

显然,基于所有 ZipFile 示例,您需要将存档存储在一个变量中

def ExtractZip(zipFile, path):
   archive = zipfile.ZipFile.open(zipFile, 'r')
   archive.extractall(path)

【讨论】:

【参考方案3】:
    这不是使用 zipfile 模块的最佳方式,尽管您的方法没有任何问题 您没有将 zipfile 对象存储在任何变量中,因此您没有访问它

你的函数应该是什么样子

import zipfile

def extract_zip(path: str):
    with zipfile.Zipfile(path) as file:
        file.extractall()

这会将 zipfile 提取到它所在的同一目录中。虽然这样做更好,因为它使用上下文管理器,在您使用完文件后会自动为您关闭文件。

如果您想将压缩文件解压缩到另一个文件夹中

import zipfile
    
def extract_zip(path: str, extract_to: str):
    with zipfile.Zipfile(path) as file:
        file.extractall(path=extract_to)

这会将文件解压缩到您指定的文件夹中。此外,使用这种方法,您不需要将模式指定为已读,因为默认情况下会这样做。

【讨论】:

【参考方案4】:

这就是我使用zipfile 访问档案的方式。

import zipfile
zippedArchive = zipfile.ZipFile('Scripts.zip')
print zippedArchive.open("Scripts/PlayPauseYouTube.scpt").read()

将打印PlayPauseYouTube.scpt 文件的内容。

如果您想提取 zip 存档中的所有文件,例如到另一个位置,您可以使用zipfile.extractall

ZipFile.extractall([path[, members[, pwd]]])  

从存档中提取所有成员到当前工作目录。 path 指定要提取到的不同目录。 members 是可选的,并且必须是zipfile.namelist() 返回的列表的子集。 pwd 是用于加密文件的密码。

import zipfile
zippedArchive = zipfile.ZipFile('Scripts.zip')
zippedArchive.extractall()

【讨论】:

不回答 OP 的问题

以上是关于如何使用 python 提取封闭的 zip的主要内容,如果未能解决你的问题,请参考以下文章

下载一个 zip 文件并使用 Python3 将其提取到内存中

如何从 zip 中提取 csv 文件并在 python 中将其保存到磁盘? [复制]

如何使用 Python 的 zipfile 模块对 ZIP 文件中的文件设置权限(属性)?

使用 python zipfile 提取 zip 子文件夹中的文件

从 Python3 中的 .zip 文件中提取和读取 [重复]

如何在 Windows 批处理文件中使用 7zip 从 ZIP 存档中提取最后一个目录?