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

从AWS S3下载ZIP解压时如何避免生成临时文件或过滤有效文件

问题解答

1、解压时是否可以避免生成临时无用文件

可以。你当前使用的extractall()会将压缩包内所有内容全量解压,包括macOS系统打zip包时自动带入的元数据目录、隐藏文件。只要将全量解压逻辑替换为仅提取目标有效文件,就能完全避免生成无用临时文件。

你看到的__MACOSX前缀、._前缀的文件均为macOS生成的资源派生元数据,和解压操作本身无关。

2、有效文件过滤方法

可以通过以下规则快速过滤出有效文件,同时也可以直接在解压环节就做过滤,从根源避免无用文件落盘:

  • 排除所有路径前缀为__MACOSX/的条目
  • 排除路径中包含/._的隐藏元数据文件
  • 排除末尾为/的目录条目
  • 取路径最后一段的文件名,匹配你需要的DockBooking、LoadEquipment等目标文件即可

参考代码如下:

import boto3
import zipfile
import os

s3 = boto3.client('s3')
s3.download_file('testunzipping','DataPump_10000838.zip','/tmp/DataPump_10000838.zip')

valid_files = []
# 可根据实际需求扩展目标文件名列表
target_names = {"DockBooking", "LoadEquipment"}
with zipfile.ZipFile('/tmp/DataPump_10000838.zip', 'r') as zip_ref:
    for item in zip_ref.namelist():
        # 过滤无用条目
        if item.startswith('__MACOSX/') or '/._' in item or item.endswith('/'):
            continue
        # 提取路径最后一段的文件名
        file_name = os.path.basename(item)
        if file_name in target_names:
            valid_files.append(item)
            # 仅解压有效文件,避免生成垃圾文件
            zip_ref.extract(item, '/tmp/')

执行后valid_files中仅会保留你需要的有效文件路径。

3、生成指定格式gzip包的实现方式

不需要自己实现compress函数,直接使用Python标准库自带的gzip模块即可完成需求,参考代码如下:

import gzip
import time

# 生成秒级unix时间戳
epoch_ts = int(time.time())
for file_path in valid_files:
    base_name = os.path.basename(file_path)
    # 拼接要求格式的输出文件名:$item_$unixepochtimestamp.csv.gz
    output_name = f"{base_name}_{epoch_ts}.csv.gz"
    output_path = f"/tmp/{output_name}"
    
    # 读取原文件内容写入gzip压缩包
    with open(f"/tmp/{file_path}", 'rb') as f_in, gzip.open(output_path, 'wb') as f_out:
        f_out.writelines(f_in)

如果需要调整压缩等级,可以在gzip.open时传入compresslevel参数,取值范围1-9,数值越高压缩比越高、压缩速度越慢,默认值为9。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:45:00