如何解压_DeflateLevel=4的netCDF文件in.nc?nccopy命令无效
解压DeflateLevel=4的netCDF文件失败问题
我有一个名为in.nc的压缩netCDF文件,其_DeflateLevel=4,需要对该文件进行解压。我尝试执行命令nccopy -d 0 in.nc out.nc,但没有产生任何效果。以下是in.nc的详细规格:
time_counter = UNLIMITED ; // 当前为12个 y = 552 ; x = 552 ; variables: float Q16c(time_counter, y, x) ; Q16c:long_name = "深层沉积物颗粒有机物" ; Q16c:units = "mg C/m²" ; Q16c:online_operation = "平均" ; Q16c:interval_operation = "900 秒" ; Q16c:interval_write = "1 个月" ; Q16c:cell_methods = "时间:平均(间隔:900 秒)" ; Q16c:_FillValue = 1.e+20f ; Q16c:missing_value = 1.e+20f ; Q16c:coordinates = "time_centered nav_lat nav_lon" ; Q16c:_Storage = "分块存储" ; Q16c:_ChunkSizes = 1, 552, 552 ; Q16c:_DeflateLevel = 4 ; Q16c:_Endianness = "小端" ;
解决方法
- 检查
nccopy版本:旧版本的nccopy对分块存储的netCDF文件支持不佳,-d 0参数可能无法生效,建议更新netCDF工具集到最新版本后重试。 - 强制生成无压缩的经典格式:添加
-k classic参数,经典netCDF格式不支持压缩,可直接实现解压:nccopy -k classic -d 0 in.nc out.nc - 先移除压缩属性再复制:用
ncatted删除变量的_DeflateLevel属性,再执行复制:ncatted -a _DeflateLevel,Q16c,d,, in.nc temp.nc nccopy temp.nc out.nc rm temp.nc - 验证结果:执行命令后用
ncdump -h out.nc查看输出文件的变量属性,确认_DeflateLevel已被移除,即可判断解压成功。
内容的提问来源于stack exchange,提问作者Amr Talaat
相关产品推荐
相关产品推荐

