在 zipfile 中递归列出所有目录而不在 python 中提取

Posted

技术标签:

【中文标题】在 zipfile 中递归列出所有目录而不在 python 中提取【英文标题】:Listing all directories recursively within the zipfile without extracting in python 【发布时间】:2016-09-21 13:09:20 【问题描述】:

在 Python 中,我们可以使用以下代码获取 zipfile 中所有文件的列表,而无需提取 zip 文件。

import zipfile
zip_ref = zipfile.ZipFile(zipfilepath, 'r')
    for file in zip_ref.namelist():
        print file

同样有没有办法在不提取 zipfile 的情况下获取 zipfile 中所有目录和子目录的列表?

【问题讨论】:

我不相信zipfile 有这种能力。理论上你可以使用zlib 并尝试自己解析“central directory”,但除非这些文件非常大而且你有很多文件,否则我不会那么麻烦。我会继续寻找更合理的解决方案。虽然 试过ZipFile.infolist? @metatoaster 我做的快速测试表明这甚至会以可预测的顺序(深度优先字母顺序)吐出文件确认?否定?想法? 没有“解压 zip 文件”是什么意思?这些方法提供了一个列表,为了生成列表,必须首先提取清单...... 【参考方案1】:
import zipfile

with zipfile.ZipFile(zipfilepath, 'r') as myzip:
   print(myzip.printdir())

【讨论】:

【参考方案2】:

感谢大家的帮助。

import zipfile

subdirs_list = []
zip_ref = zipfile.ZipFile('C:/Download/sample.zip', 'r')
for dir in zip_ref.namelist():
    if dir.endswith('/'):
        subdirs_list.append(os.path.basename(os.path.normpath(dir)))

print subdirs_list

使用上面的代码,我可以在我的 zipfile 中获取所有目录和子目录的列表,而无需提取 sample.zip。

【讨论】:

以上是关于在 zipfile 中递归列出所有目录而不在 python 中提取的主要内容,如果未能解决你的问题,请参考以下文章

在Unix中递归列出文件中的所有文件? [复制]

Directory.CreateDirectory() 不在 ZipFile 中创建文件夹

如何在 Java 中使用 ZipFile 类递归打开所有文件,包括文件夹下的文件

如何在 Python 中使用 zipfile 模块列出文件夹的文件

递归法列出目录中的所有文件

列出目录中的所有序列(递归)