【发布时间】:2018-07-23 04:23:09
【问题描述】:
我正在尝试从现有的 NetCDF 文件创建一个新的 NetCDF 文件。我只对使用 177 个变量列表中的 12 个变量感兴趣。您可以从这个 ftp 站点 here 找到示例 NetCDF 文件。
我使用了之前 SO 答案中的以下代码。你可以找到它here。
import netCDF4 as nc
file1 = '/media/sf_jason2/cycle_001/JA2_GPN_2PdP001_140_20080717_113355_20080717_123008.nc'
file2 = '/home/sandbox/test.nc'
toinclude = ['lat_20hz', 'lon_20hz', 'time_20hz', 'alt_20hz', 'ice_range_20hz_ku', 'ice_qual_flag_20hz_ku', 'model_dry_tropo_corr', 'model_wet_tropo_corr', 'iono_corr_gim_ku', 'solid_earth_tide', 'pole_tide', 'alt_state_flag_ku_band_status']
with nc.Dataset(file1) as src, nc.Dataset(file2, "w") as dst:
# copy attributes
for name in src.ncattrs():
dst.setncattr(name, src.getncattr(name))
# copy dimensions
for name, dimension in src.dimensions.iteritems():
dst.createDimension(
name, (len(dimension) if not dimension.isunlimited else None))
# copy all file data for variables that are included in the toinclude list
for name, variable in src.variables.iteritems():
if name in toinclude:
x = dst.createVariable(name, variable.datatype, variable.dimensions)
dst.variables[name][:] = src.variables[name][:]
我遇到的问题是原始文件只有 5.3 MB,但是当我在新文件上复制新变量时,大小约为 17 MB。剥离变量的全部目的是减小文件大小,但我最终会得到更大的文件大小。
我也尝试过使用 xarray。但是当我尝试合并多个变量时遇到问题。以下是我试图在 xarray 中实现的代码。
import xarray as xr
fName = '/media/sf_jason2/cycle_001/JA2_GPN_2PdP001_140_20080717_113355_20080717_123008.nc'
file2 = '/home/sandbox/test.nc'
toinclude = ['lat_20hz', 'lon_20hz', 'time_20hz', 'alt_20hz', 'ice_range_20hz_ku', 'ice_qual_flag_20hz_ku', 'model_dry_tropo_corr', 'model_wet_tropo_corr', 'iono_corr_gim_ku', 'solid_earth_tide', 'pole_tide', 'alt_state_flag_ku_band_status']
ds = xr.open_dataset(fName)
newds = xr.Dataset()
newds['lat_20hz'] = ds['lat_20hz']
newds.to_netcdf(file2)
如果我尝试复制一个变量,Xarray 可以正常工作,但是,当我尝试将多个变量复制到一个空数据集时,它会出现问题。我找不到任何使用 xarray 复制多个变量的好例子。无论哪种方式,我都很好地实现了这个工作流程。
最后,如何减小使用 netCDF4 创建的新 NetCDF 的文件大小?如果这不理想,有没有办法将多个变量添加到 xarray 中的空数据集而不会出现合并问题?
【问题讨论】:
-
一定要用 Python 吗?如果没有,NCO 是处理这种情况的好工具。
标签: python netcdf python-xarray