求助:如何使用Python将目录中的HDF5文件批量转换为NC文件?
Python批量转换HDF5到NetCDF文件
准备工作
先安装依赖库:
pip install h5py netCDF4
批量转换代码
下面是可遍历指定目录下所有HDF5文件并转换为NC文件的脚本:
import os import h5py from netCDF4 import Dataset def hdf5_to_netcdf(hdf5_path, nc_path): # 打开HDF5文件 with h5py.File(hdf5_path, 'r') as hdf: # 创建NetCDF文件 with Dataset(nc_path, 'w', format='NETCDF4') as nc: # 递归复制HDF5的组和数据集到NetCDF def copy_group(hdf_group, nc_group): # 复制当前组的属性 for attr_name, attr_value in hdf_group.attrs.items(): nc_group.setncattr(attr_name, attr_value) # 遍历组内对象 for name, obj in hdf_group.items(): if isinstance(obj, h5py.Group): # 创建对应NetCDF组 new_nc_group = nc_group.createGroup(name) copy_group(obj, new_nc_group) elif isinstance(obj, h5py.Dataset): # 创建NetCDF变量并写入数据 nc_var = nc_group.createVariable( name, obj.dtype, obj.shape ) nc_var[:] = obj[:] # 复制数据集属性 for attr_name, attr_value in obj.attrs.items(): nc_var.setncattr(attr_name, attr_value) # 从根组开始复制 copy_group(hdf, nc) # 设置目标目录(替换为你的实际用户目录路径) target_dir = "/path/to/your/hdf5/files" # 遍历目录下所有HDF5文件 for filename in os.listdir(target_dir): if filename.endswith(('.h5', '.hdf5')): hdf5_path = os.path.join(target_dir, filename) nc_filename = os.path.splitext(filename)[0] + '.nc' nc_path = os.path.join(target_dir, nc_filename) print(f"转换中: {filename} -> {nc_filename}") hdf5_to_netcdf(hdf5_path, nc_path) print("全部转换完成")
关键细节说明
- 数据类型兼容:HDF5中的基础数据类型(int、float、string等)可直接映射到NetCDF4,特殊类型需手动调整转换逻辑
- 层级结构保留:脚本支持递归复制HDF5的组结构,保持原文件的层级关系
- 元数据同步:会复制HDF5文件、组、数据集的所有属性信息
- 路径替换:务必将
target_dir替换为你的实际用户目录路径
若遇到特定HDF5结构的转换问题,可补充文件结构细节来调整代码。
内容的提问来源于stack exchange,提问作者Adib
相关产品推荐
相关产品推荐

