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

如何压缩com.facebook.katana时去除Downloads目录层级?

解决Python压缩文件夹时保留多余层级的问题

这问题我太熟悉了!你遇到的是压缩时默认保留了源目录上级层级的问题,核心原因是zipfile.write()方法默认会把文件的完整系统路径写入压缩包,所以解压后会带出Downloads这个上级目录。要解决这个,我们只需要利用write()的arcname参数,手动指定压缩包内的文件路径,去掉多余的层级就行。

修改后的完整代码

import os
import zipfile

def retrieve_file_paths(dir_name):
    file_paths = []
    # 遍历目标目录下的所有文件(包括子目录)
    for root, _, files in os.walk(dir_name):
        for filename in files:
            full_path = os.path.join(root, filename)
            file_paths.append(full_path)
    return file_paths

def main():
    # 要压缩的目标文件夹(Downloads下的com.facebook.katana)
    target_dir = './Downloads/com.facebook.katana'
    # 输出zip文件的保存路径(AndroidBags目录下)
    output_zip = './AndroidBags/com.facebook.katana.zip'
    
    # 获取所有需要压缩的文件路径
    file_paths = retrieve_file_paths(target_dir)
    
    print('即将压缩的文件列表:')
    for path in file_paths:
        print(path)
    
    # 创建zip文件并写入内容
    with zipfile.ZipFile(output_zip, 'w', zipfile.ZIP_DEFLATED) as zip_file:
        for full_path in file_paths:
            # 核心:计算文件相对于目标文件夹的相对路径,作为压缩包内的路径
            arcname = os.path.relpath(full_path, start=target_dir)
            # 写入文件时指定arcname,避免带入上级目录
            zip_file.write(full_path, arcname=arcname)
    
    print(f'{output_zip} 已成功生成!')

if __name__ == '__main__':
    main()

关键修改说明

  1. 指定正确的路径:

    • 把原代码中模糊的dir_name改成明确的目标文件夹路径./Downloads/com.facebook.katana
    • 直接指定输出zip的路径为./AndroidBags/com.facebook.katana.zip,确保文件生成到你想要的目录
  2. 使用arcname控制压缩包内结构:

    • 通过os.path.relpath(full_path, start=target_dir)计算每个文件相对于目标文件夹的相对路径,比如:
      • 原路径./Downloads/com.facebook.katana/one.txt的相对路径是one.txt
      • 原路径./Downloads/com.facebook.katana/Data/PetController.java的相对路径是Data/PetController.java
    • 把这个相对路径传给zipfile.write()的arcname参数,压缩包内就会保留com.facebook.katana内部的目录结构,而不会带出Downloads层级
  3. 启用压缩(可选):

    • 添加了zipfile.ZIP_DEFLATED参数,让生成的zip文件是压缩后的(原代码默认是不压缩的存储模式),如果不需要压缩可以去掉这个参数

这样修改后,你生成的zip文件解压后就会直接显示com.facebook.katana文件夹及其包含的所有文件和子目录啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:58:26