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

如何将GLOBathy数据集按国家分类批量复制到新文件夹?

高效提取GLOBathy湖泊水深数据(按国家分类)

问题背景

GLOBathy是覆盖全球绝大多数湖泊的水深测量数据集,压缩包大小15.58GB,包含140余万条记录,数据分散在多个子目录中。配套的属性表记录了每个数据文件对应的所属国家,但文件名与所属国家无直观对应关系,手动从子目录提取数据极为繁琐;使用GIS软件直接从多目录批量提取数据速度极慢,通常需要依赖循环操作才能完成。

解决方案

1. 前期准备

  • 解压GLOBathy水深栅格数据集,获取分散在各子目录的栅格文件
  • 整理好关联的属性表文件(包含文件名与对应国家的映射关系)

2. Python批量处理脚本(基于pandas+GDAL)

第一步:构建文件名-国家映射字典

import pandas as pd

# 读取属性表(根据实际文件格式调整,示例为CSV)
attr_table = pd.read_csv("waterbody_attributes.csv")
# 建立文件名与国家的映射(注意匹配文件前缀,忽略后缀)
name_to_country = dict(zip(attr_table["file_name"], attr_table["country"]))

第二步:按国家分类提取/复制文件

import os
import shutil
from osgeo import gdal

# 配置路径
source_root = "你的GLOBathy栅格根目录路径"
output_root = "按国家分类的输出根目录路径"

# 提前创建所有国家的输出目录
for country in set(name_to_country.values()):
    os.makedirs(os.path.join(output_root, country), exist_ok=True)

# 遍历所有子目录的栅格文件
for root, _, files in os.walk(source_root):
    for file in files:
        # 仅处理栅格文件(以.tif为例,根据实际格式调整)
        if file.lower().endswith(".tif"):
            # 获取文件前缀(匹配属性表中的文件名)
            file_prefix = file.split(".")[0]
            country = name_to_country.get(file_prefix)
            if country:
                src_path = os.path.join(root, file)
                dst_path = os.path.join(output_root, country, file)
                # 直接复制文件(若无需栅格内容处理)
                shutil.copy(src_path, dst_path)
                # 若需合并同国家栅格,可调用GDAL的merge工具:
                # os.system(f"gdal_merge.py -o {os.path.join(output_root, country, f'{country}_merged.tif')} {src_path}")

效率优化建议

  • 若仅需提取特定国家数据,可先筛选属性表,缩小遍历范围
  • 使用多线程/多进程加速文件操作,例如借助concurrent.futures模块
  • 优先使用GDAL命令行工具(如gdal_merge、gdalwarp)替代GIS软件的图形界面操作,大幅提升处理速度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:47:48