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

如何将文件打包为Zip文件?解决Python打包后Zip为空问题

解决Zip打包问题:空文件修复与完整文件打包指南

一、你的代码为什么生成空Zip?

你的核心问题出在endswith()的用法上:

  • 你写的file.endswith('.jpg,.txt,.mp3,.mp4')是错误的,endswith()接受的是字符串元组,而不是逗号分隔的单个字符串。这个条件永远返回False,所以没有任何文件被添加到Zip中。
  • 另外,手动调用file_zip.close()不够安全,推荐用with语句自动管理文件句柄,避免因异常导致资源泄漏。

二、修正后的代码

这里是修复并优化后的版本,能正确打包你指定的文件类型:

import zipfile
import os

path = "G:"
# 用with语句自动关闭Zip文件,更安全
with zipfile.ZipFile(os.path.join(path, 'archive.zip'), 'w', zipfile.ZIP_DEFLATED) as file_zip:
    # 用元组指定要筛选的文件后缀(这是endswith的正确用法)
    target_extensions = ('.txt', '.mp3', '.mp4', '.jpg')
    for folder, subfolders, files in os.walk(path):
        for file in files:
            # 加上lower()可以兼容大小写后缀,比如.TXT、.MP3也能匹配
            if file.lower().endswith(target_extensions):
                file_path = os.path.join(folder, file)
                # 计算相对路径,避免Zip里出现完整的G:\层级路径
                relative_path = os.path.relpath(file_path, path)
                file_zip.write(file_path, relative_path)

三、如何将完整文件复制到Zip中?

分两种常见场景:

1. 单个文件直接打包

如果只是把一个完整文件加入Zip,代码非常简洁:

import zipfile

with zipfile.ZipFile('archive.zip', 'w') as zf:
    # 第一个参数是源文件路径,第二个参数是Zip内显示的文件名(可选,默认用原文件名)
    zf.write('example.txt', 'my_custom_name.txt')

2. 批量打包指定文件/整个目录

  • 如果要打包整个目录的所有文件(不筛选后缀),去掉后缀判断即可:
import zipfile
import os

path = "G:"
with zipfile.ZipFile(os.path.join(path, 'full_archive.zip'), 'w', zipfile.ZIP_DEFLATED) as file_zip:
    for folder, subfolders, files in os.walk(path):
        for file in files:
            file_path = os.path.join(folder, file)
            relative_path = os.path.relpath(file_path, path)
            file_zip.write(file_path, relative_path)
  • 如果是指定多个分散的单个文件打包,把文件路径放进列表循环添加:
import zipfile

files_to_zip = ['document.txt', 'background.mp3', 'demo.mp4']
with zipfile.ZipFile('selected_files.zip', 'w') as zf:
    for file in files_to_zip:
        zf.write(file)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:24:13