关键是使用netCDF4.stringtochar函数将字符串数组转换为字符数组。
import netCDF4
import numpy as np
str_out = netCDF4.stringtochar(np.array(['test'], 'S4'))
nc = netCDF4.Dataset('./test.nc', 'w', format='NETCDF4_CLASSIC')
nc.createDimension('lat', 1)
nc.createDimension('lon', 1)
nc.createDimension('nchar', 4)
lat = nc.createVariable('lat', 'f4', ('lat',))
lon = nc.createVariable('lon', 'f4', ('lon',))
place = nc.createVariable('place', 'S1', ('nchar'))
lat[:] = 17.002
lon[:] = -81.501
place[:] = str_out
nc.close()
你可以检查输出
>>> ncks test.nc
...
lat[0]=17.002
lon[0]=-81.501
nchar[0] place[0--3]='test'
请注意,通过删除“NETCDF4_CLASSIC”的格式,您可以通过另一种方式完成此操作:
str_out = np.array(['test'], dtype='object')
nc = netCDF4.Dataset('./test.nc', 'w')
nc.createDimension('lat', 1)
nc.createDimension('lon', 1)
nc.createDimension('str_dim', 1)
lat = nc.createVariable('lat', 'f4', ('lat',))
lon = nc.createVariable('lon', 'f4', ('lon',))
# Now we can use the data type of 'str'
place = nc.createVariable('place', str, ('str_dim',))
lat[:] = 17.002
lon[:] = -81.501
place[:] = str_out
nc.close()
>>> ncks test.nc
...
lat[0]=17.002
lon[0]=-81.501
str_dim[0] place[0]=test