GEE 批量删除 Assets 资产文件夹

批量删除 Google Earth Engine (GEE) 资产文件夹及其内容的脚本介绍 🗑️

在处理大规模遥感数据时,尤其是在 Google Earth Engine (GEE) 平台上进行数据分析和处理,管理海量的文件夹和资产成为一项关键任务。手动删除这些资产不仅耗时且容易出错。本文将介绍一个高效的 Python 脚本,用于批量删除 GEE 中指定的文件夹及其所有内容,包括递归删除子文件夹和文件,帮助您快速清理不需要的资产,优化存储和管理效率。


完整版地址

  • 详细原文见:
    • https://mp.weixin.qq.com/s?__biz=Mzk0MTU1MjU5Mw==&mid=2247485088&idx=1&sn=fc2bd166d9e63613bef3ebec6bd283a1&chksm=c2d1e01ef5a669083618d141fdc51428d981044a7aabd9947c2dac0259ed2303c7efd308b4b2#rd

应用场景 🌐

在 GEE 平台中,若要删除资产文件夹,需要提前将子内容全部删除,而批量的清理总是麻烦的:

  • 释放存储空间:清理旧的、无用的资产,优化存储资源。
  • 自动化资产管理:通过编程方式批量管理大量文件夹结构,提升工作效率。

使用方法 🛠️

在使用此脚本前,请确保完成以下步骤:

1. 环境准备

  • 安装必要的库:确保已安装 earthengine-api。可以通过以下命令安装:

    pip install earthengine-api
    
  • 配置网络代理(如有需要):如果您的网络环境需要代理,请设置相应的环境变量。

2. GEE 账户授权

  • 首次使用时授权:运行 ee.Authenticate() 以完成 GEE 账户的授权认证。

    import ee
    ee.Authenticate()
    

3. 初始化 GEE API

  • 初始化 API:使用您的 GEE 项目 ID 初始化 Earth Engine API。

    ee.Initialize(project='your_project_id')
    

4. 指定删除路径

  • 修改删除路径:在 main() 函数中,将 folder_delete_path 修改为您需要删除的资产文件夹路径。

    folder_delete_path = 'users/xxxx/aim_folder'
    

5. 运行脚本

  • 执行脚本:运行 Python 文件,脚本将递归删除指定文件夹中的所有文件及子文件夹,最终删除目标文件夹本身。

代码详情 🖥️

以下是用于批量删除 GEE 资产文件夹及其内容的完整 Python 脚本:

# -*- coding:utf-8 -*-
"""
此代码用于批量删除 Google Earth Engine (GEE) 资产存储中的指定文件夹及其所有内容。
递归删除指定文件夹中的所有资产(包括子文件夹和文件),并最终删除目标文件夹本身。

"""

import ee
import os
import time

# 配置网络代理(如无代理,请注释以下两行)
os.environ['HTTP_PROXY'] = 'http://127.0.0.1:xxxx'
os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:xxxx'

# 解决 OpenSSL 3.0 兼容性问题
os.environ['CRYPTOGRAPHY_OPENSSL_NO_LEGACY'] = '1'

# 授权并初始化 Earth Engine API
ee.Authenticate()
ee.Initialize(project='ee-xxxx')


def delete_asset_folder(delete_path):
    """
    递归删除指定的资产文件夹及其所有内容。

    参数:
    delete_path (str): 要删除的文件夹路径,例如 'users/xxxx/aim_folder'
    """
    try:
        print(f"正在处理删除路径: {delete_path}")

        # 获取该文件夹下的所有资产
        assets = ee.data.getList({'id': delete_path})
        for asset in assets:
            asset_id = asset['id']
            asset_type = asset['type']
            if asset_type == 'FOLDER':
                # 递归删除子文件夹
                delete_asset_folder(asset_id)
            else:
                # 删除文件资产
                ee.data.deleteAsset(asset_id)
                print(f"已删除资产: {asset_id}")

            # 为避免触发速率限制,添加短暂延时
            time.sleep(1)

        # 删除空文件夹
        ee.data.deleteAsset(delete_path)
        print(f"已删除文件夹: {delete_path}")

    except ee.EEException as e:
        if "not found" in str(e):
            print(f"资产 {delete_path} 不存在,无需删除。")
        else:
            print(f"删除资产 {delete_path} 时出错: {e}")
            raise  # 重新抛出异常以便进一步处理或终止脚本


def main():
    """
    主函数,删除指定的 GEE 资产文件夹及其所有内容。
    """
    # 要删除的文件夹路径(确保不以斜杠结尾)
    folder_delete_path = 'users/xxxx/aim_folder'

    # 调用删除函数
    delete_asset_folder(folder_delete_path)


if __name__ == '__main__':
    main()

代码优势 ✨

  1. 自动化批量删除:能够递归删除文件夹及其所有内容,适合处理复杂的文件夹结构,显著提升效率。
  2. 稳定性强:通过捕获和处理异常,避免因个别错误导致整个删除流程中断,确保操作的连续性。
  3. 速率控制:在删除过程中加入短暂的延时,避免触发 GEE 的速率限制,保证脚本在长时间运行时的稳定性。
  4. 易于配置和修改:用户只需修改少量代码即可适应不同的使用场景,便于扩展和维护。

注意事项 ⚠️

  1. 删除操作不可逆:执行删除操作后,文件夹及其内容将无法恢复。请在使用前确认要删除的资产路径正确无误
  2. 确保正确的网络代理配置:如果使用代理访问 GEE,请确保正确设置 HTTP_PROXYHTTPS_PROXY,否则可能无法正常连接 GEE。
  3. OpenSSL 兼容性问题:如果遇到 OpenSSL 相关错误,请确保设置了 CRYPTOGRAPHY_OPENSSL_NO_LEGACY = '1' 以解决兼容性问题。
  4. 速率限制:Google Earth Engine 对 API 调用有速率限制。在删除大量资产时,保持适当的延时,以避免触发限制。

相关函数讲解 📚

函数名称功能描述参数说明
ee.Authenticate()用户身份验证。执行该函数时,系统会提示用户通过浏览器登录 Google 账户,并授权使用 GEE API。
ee.Initialize(project='your_project_id')初始化 Google Earth Engine API。project 参数指定了用户的 GEE 项目 ID,确保后续 API 操作能够正确执行。project:GEE 项目 ID。
delete_asset_folder(delete_path)递归删除指定的资产文件夹及其所有内容,包括子文件夹和文件。delete_path:要删除的文件夹路径,例如 'users/nicexian0011/_DGS_GSV_Grids'
ee.data.getList({'id': delete_path})获取指定文件夹路径下的所有资产列表,返回每个资产的 idtype,用于区分是文件还是子文件夹。{'id': delete_path}:字典形式的请求参数,包含要获取的文件夹路径。
ee.data.deleteAsset(asset_id)删除指定的 GEE 资产(文件或文件夹)。在递归遍历到某个文件夹或文件时,调用此函数进行删除。asset_id:要删除的资产路径,例如 'users/nicexian0011/_DGS_GSV_Grids/subfolder'
time.sleep(1)在删除每个资产后添加短暂的延时(单位:秒),用于避免频繁调用 GEE API 导致的速率限制问题。1:延时的秒数。

结论 🎯

本文介绍了一个实用的 Python 脚本,用于批量删除 Google Earth Engine (GEE) 资产文件夹及其所有内容。该脚本通过递归删除和速率控制,实现了高效且稳定的批量删除任务,极大地简化了资产管理流程。用户在实际应用中应注意确认删除路径的准确性,以避免误删重要数据,同时遵守 GEE 的速率限制,确保脚本顺利执行。


希望本文对您在 GEE 数据管理和遥感数据处理工作中有所帮助!如果有任何问题或建议,欢迎在评论区交流讨论。😊

术语解释表 📖

术语解释
earthengine-apiGoogle 提供的 Python 库,用于与 GEE 进行交互。
ee.Authenticate()Earth Engine API 的认证函数,用于验证用户身份。
ee.Initialize()初始化 Earth Engine API,准备进行数据操作。
ee.data.getList()获取指定文件夹路径下的所有资产列表。
ee.data.deleteAsset()删除指定的 GEE 资产(文件或文件夹)。

如果这对您有所帮助,希望点赞支持一下作者! 😊

详细全文-点击查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值