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

如何避免tf.keras.utils.get_file()解压tar时生成._开头重复文件

解决tf.keras.utils.get_file解压生成._*前缀多余文件的方法

你遇到的._*前缀文件是macOS系统特有的AppleDouble元数据文件,通常是源压缩包在macOS环境下打包时被默认加入的,并非tf.keras.utils.get_file主动生成,该工具自带的解压逻辑没有内置过滤规则,你可以通过以下方法解决:

方案1:修改源压缩包(适用于你可以控制打包流程的场景)

在macOS环境下执行打包命令前,先设置COPYFILE_DISABLE=1环境变量,即可避免把元数据写入压缩包:

COPYFILE_DISABLE=1 tar -czf 你的压缩包名称.tgz 待打包的目录路径

替换源站的压缩包后,再调用get_file开启untar=True就不会解压出多余文件。

方案2:手动解压过滤(适用于无法修改源压缩包的场景)

关闭get_file的自动解压功能,拿到下载的压缩包路径后用Python的tarfile模块手动过滤后解压,示例代码如下:

import tarfile
import tensorflow as tf

# 仅下载压缩包,不自动解压
downloaded_tgz_path = tf.keras.utils.get_file(
    fname=<你要保存的文件名>,
    origin=<tgz资源地址>,
    untar=False
)

# 手动解压,过滤所有._开头的元数据文件
extract_target_dir = downloaded_tgz_path.rsplit('.', 1)[0] # 也可以自定义解压路径
with tarfile.open(downloaded_tgz_path, 'r:gz') as tar:
    valid_members = [
        member for member in tar.getmembers()
        if not member.name.startswith('._') and '/._' not in member.name
    ]
    tar.extractall(path=extract_target_dir, members=valid_members)

方案3:事后清理

如果坚持使用get_file自带的解压逻辑,可以在解压完成后遍历目录批量删除所有._开头的文件:

import os

def clean_macos_metadata(root_dir):
    for dirpath, dirnames, filenames in os.walk(root_dir):
        for f in filenames:
            if f.startswith('._'):
                os.remove(os.path.join(dirpath, f))

# 传入你的解压目录调用即可
clean_macos_metadata(<你的解压目录路径>)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:42:01