📜  排除递归 zip 中的目录 (1)

📅  最后修改于: 2023-12-03 14:54:42.818000             🧑  作者: Mango

排除递归 zip 中的目录

在处理 zip 文件时,我们有时需要遍历所有文件,但是我们不希望包含目录,因为目录并不是文件。

以下是一个 Python 示例代码,演示如何通过递归解压 zip 文件并排除目录。

import os
from zipfile import ZipFile

def extract_zip(file_path, target_dir):
    with ZipFile(file_path, 'r') as zf:
        for zip_info in zf.infolist():
            zip_name = zip_info.filename
            if zip_info.is_dir():
                # 如果是目录则跳过
                continue
            file_path = os.path.join(target_dir, zip_name)
            print(f"Extracting {zip_name}...")
            with open(file_path, 'wb') as f:
                f.write(zf.read(zip_name))

该函数使用 Python 内置库 zipfile 实现,它首先打开 zip 文件,然后遍历 zip 中的所有元素(目录或文件)。如果元素是目录,则跳过,否则将其解压缩到指定目录中。

可以使用该函数来解压任意 zip 文件并排除目录。

extract_zip('example.zip', '/tmp/unzip')

将上述代码复制到 Python 解释器环境中并运行,输出如下示例:

Extracting myfile.txt...
Extracting subdir/myfile2.txt...

其中,example.zip 是一个包含 myfile.txt 和 subdir/myfile2.txt 两个文件的 zip 文件,/tmp/unzip 是解压缩目标目录。

在本例中,目录 subdir 不被解压缩,只有其下的文件被解压缩。