17

如何仅列出 zip 存档中的文件夹?这将列出存档中的每个文件夹和文件:

import zipfile
file = zipfile.ZipFile("samples/sample.zip", "r")
for name in file.namelist():
    print name

谢谢。

4

4 回答 4

13

一种方法可能是:

>>> [x for x in file.namelist() if x.endswith('/')]
<<< ['folder/', 'folder2/']
于 2011-06-28T17:29:06.237 回答
10

我不认为以前的答案是跨平台兼容的,因为他们假设 pathep/如某些评论中所述。他们也忽略了子目录(这可能对Pythonpadavan很重要,也可能无关紧要......从问题中并不完全清楚)。关于什么:

import os
import zipfile

z = zipfile.Zipfile('some.zip', 'r')
dirs = list(set([os.path.dirname(x) for x in z.namelist()]))

如果您真的只想要顶级目录,那么将其与agroszer的答案结合起来进行最后一步:

topdirs = [os.path.split(x)[0] for x in dirs]

(当然,最后两个步骤可以合并:)

于 2016-03-23T18:51:20.950 回答
4

在 python 3 中,这假设绝对路径被馈送到ZipFile

from zipfile import ZipFile

zip_f = ZipFile("./Filename.zip")

# All directories:
for f in zip_f.namelist():
    zinfo = zip_f.getinfo(f)
    if(zinfo.is_dir()):
        print(f)

# Only root directories:
root_dirs = []
for f in zip_f.namelist():
    zinfo = zip_f.getinfo(f)
    if zinfo.is_dir():
        # This is will work in any OS because the zip format
        # specifies a forward slash.
        r_dir = f.split('/')
        r_dir = r_dir[0]
        if r_dir not in root_dirs:
            root_dirs.append(r_dir)
for d in root_dirs:
    print(d)
于 2018-03-08T16:20:17.043 回答
1

更多沿线

set([os.path.split(x)[0] for x in zf.namelist() if '/' in x])

因为 python 的 zipfile 不只存储文件夹

于 2014-04-01T15:32:05.367 回答