在Python中循环遍历zip文件时,我如何知道一个项是目录?

17

做类似这样的事情:

from zipfile import ZipFile

#open zip file
zipfile = ZipFile('Photo.zip')

#iterate zip contents
for zipinfo in zipfile.filelist:
    #do something
    filepath, filename = path.split(zipinfo.filename)

我如何知道zipinfo是一个文件还是一个目录?

2个回答

17

可能这是正确的方法:

is_dir = lambda zipinfo: zipinfo.filename.endswith('/')

2
我相信在zip文件中,无论是在哪个平台上创建的,目录分隔符都会被规范化为/ - Greg Hewgill
@Greg:我的疑惑是取决于打开压缩包的平台,但我没有Windows电脑来测试它。 - neurino
不,没有变化。在zip文件内部,路径分隔符始终为“/”,无论在哪个平台上打开它。 - Greg Hewgill
1
在野外发现的zip文件中,有时不会有目录成员,其中包含该目录内的文件。有时只存在文件成员,而没有包含目录的单独成员。 - amoe
哦,这个模块真是糟糕透了。如果你打印一个ZipInfo对象,它会显示一个"filemode"成员,但实际上并不存在这个成员。 - Jürgen A. Erhard

13

从Python 3.6开始,有一个ZipInfo.is_dir()方法。

with zipfile.ZipFile(zip_file) as archive:
    for file in archive.namelist():
        file_info = archive.getinfo(file)
        if file_info.is_dir():
            # do something

请参阅 Python 3.6 文档以了解详情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接