如何将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
相关产品推荐
相关产品推荐

