You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中实现交互式压缩,跟踪并显示目录内文件的压缩完成状态?

实现压缩完成后的路径输出方案

要实现每完成一个子文件夹的压缩就输出对应压缩文件的路径,最直接简洁的方案是在单个压缩任务完成后添加打印逻辑,以下是两种可行实现方式:

方案1:压缩函数内部输出结果

在create_zip函数完成文件写入并关闭压缩对象后,直接打印生成的压缩文件绝对路径,让压缩任务和结果反馈绑定:

import os
import zipfile

INPUT_FOLDER = 'to_zip'
OUTPUT_FOLDER = 'zipped'

def create_zip(folder_path, zipped_filepath):
    zip_obj = zipfile.ZipFile(zipped_filepath, 'w')
    for filename in next(os.walk(folder_path))[2]:
        zip_obj.write(
            os.path.join(folder_path, filename),
            filename,
            compress_type=zipfile.ZIP_DEFLATED
        )
    zip_obj.close()
    # 输出完成的压缩文件绝对路径
    print(os.path.abspath(zipped_filepath))

def zip_subfolders(input_folder, output_folder):
    os.makedirs(output_folder, exist_ok=True)
    for folder_name in next(os.walk(input_folder))[1]:
        zipped_filepath = os.path.join(output_folder, f'{folder_name}.zip')
        curr_folder_path = os.path.join(input_folder, folder_name)
        create_zip(curr_folder_path, zipped_filepath)

if __name__ == '__main__':
    zip_subfolders(INPUT_FOLDER, OUTPUT_FOLDER)

方案2:调用层统一输出结果

如果希望将压缩逻辑和输出逻辑分离,可以在zip_subfolders函数中调用完压缩函数后打印路径:

import os
import zipfile

INPUT_FOLDER = 'to_zip'
OUTPUT_FOLDER = 'zipped'

def create_zip(folder_path, zipped_filepath):
    zip_obj = zipfile.ZipFile(zipped_filepath, 'w')
    for filename in next(os.walk(folder_path))[2]:
        zip_obj.write(
            os.path.join(folder_path, filename),
            filename,
            compress_type=zipfile.ZIP_DEFLATED
        )
    zip_obj.close()

def zip_subfolders(input_folder, output_folder):
    os.makedirs(output_folder, exist_ok=True)
    for folder_name in next(os.walk(input_folder))[1]:
        zipped_filepath = os.path.join(output_folder, f'{folder_name}.zip')
        curr_folder_path = os.path.join(input_folder, folder_name)
        create_zip(curr_folder_path, zipped_filepath)
        # 输出完成的压缩文件绝对路径
        print(os.path.abspath(zipped_filepath))

if __name__ == '__main__':
    zip_subfolders(INPUT_FOLDER, OUTPUT_FOLDER)

补充说明

  • 使用os.path.abspath()可将相对路径转换为绝对路径,输出结果更直观,便于用户定位文件;
  • 两种方案均满足需求:方案1贴合单一职责原则,压缩任务完成后直接反馈;方案2将输出逻辑集中在调用层,方便后续统一调整输出格式。

内容的提问来源于stack exchange,提问作者Mega Bang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:35:25