如何仅列出zip归档文件夹?
这将列出归档中的每个文件夹和文件:
import zipfile
file = zipfile.ZipFile("samples/sample.zip", "r")
for name in file.namelist():
print name
谢谢。
一种方法可能是这样的:
>>> [x for x in file.namelist() if x.endswith('/')]
<<< ['folder/', 'folder2/']
我认为之前的回答并不跨平台兼容,因为它们假设路径分隔符是/
,正如一些评论中所述。此外,它们忽略了子目录(这可能或可能不重要对于Pythonpadavan...从问题中不完全清楚)。那么怎么样:
import os
import zipfile
z = zipfile.ZipFile('some.zip', 'r')
dirs = list(set([os.path.dirname(x) for x in z.namelist()]))
topdirs = [os.path.split(x)[0] for x in dirs]
os.path.dirname
将产生 ''
,你可能不想将其列为目录。 - EliadLz = zipfile.ZipFile('some.zip', 'r')
- bmabir17ZipFile
接收的是绝对路径: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)
zinfo.is_dir()
只需要检查一次,这样你就不必为zip中的每个元素拆分并检查数组以获取文件夹名称,从而减少操作次数。结果是相同的,但is_dir()
检查应该使其更快。 - Devyzrset([os.path.split(x)[0] for x in zf.namelist() if '/' in x])
>>> os.system("unzip -l zip.zip|grep /$") 0 2011-06-28 22:59 zip/one/ 0
将zip.zip
替换为你的filename
。 - Kracekumar['folder/', 'folder/f1', 'folder/f2', 'folder2/', 'folder/f3', 'folder/f4']
,我想要得到['folder', 'folder2']
。 - Pedro P. Camellon