2017.5.27
发现两个不错的网站:
Python - NetCDF reading and writing exampl:
http://schubert.atmos.colostate.edu/~cslocum/netcdf_example.html
Generating NetCDF files with Python :
http://www.ceda.ac.uk/static/media/uploads/ncas-reading-2015/11_create_netcdf_python.pdf
2017.5.14
我也是小白,贴个人家发我的程序给需要的人。
不懂的见官网:netCDF4 http://unidata.github.io/netcdf4-python/
(程序若运行有问题,请仔细检查输入数据及输出数据维度是否完全一致)
# -*- coding: utf-8 -*- 最后调用一下这个函数就行
from netCDF4 import Dataset
import numpy as np
# directories
ddir = '../data/'
def creatspinc(spivalue, filename):
gridspi = Dataset(ddir+filename, 'w', format='NETCDF4')
# dimensions
gridspi.createDimension('time', None)
gridspi.createDimension('lat', 360)
gridspi.createDimension('lon', 720)
# Create coordinate variables for dimensions
times = gridspi.createVariable('time', np.float64, ('time',))
latitudes = gridspi.createVariable('lat', np.float32, ('lat',))
longitudes = gridspi.createVariable('lon', np.float32, ('lon',))
# Create the actual variable
wha = gridspi.createVariable('wha', np.float32, ('time', 'lat', 'lon',))
# Global Attributes
import time
gridspi.description = 'wha'
gridspi.history = 'Created ' + time.ctime(time.time())
gridspi.source = 'netCDF4 python module tutorial'
# Variable Attributes
latitudes.units = 'degree_north'
longitudes.units = 'degree_east'
#SPI.units = 'mm'
times.units = 'days since 2000-01-01 00:00:00'
times.calendar = 'gregorian'
# data
lats = np.arange(89.75,-90,-0.5) #notice: the last numb is not included
lons = np.arange(-179.75,180,0.5) #notice: the last numb is not included
latitudes[:] = lats
longitudes[:] = lons
#------------------------------------------------------------------------------
# Fill in values
print 'wha shape before adding data = ', wha.shape
wha[0:spivalue.shape[0],:,:] = spivalue
print 'wha shape after adding data = ', wha.shape
# Fill in times
from datetime import datetime, timedelta
from netCDF4 import num2date, date2num
dates = []
for n in range(wha.shape[0]):
dates.append(datetime(2000, 1, 1) + n * timedelta(days=1))
times[:] = date2num(dates, units = times.units,calendar = times.calendar)
print 'time values (in units %s): ' % times.units +'\n', times[:]
dates = num2date(times[:], units=times.units, calendar=times.calendar)
print 'dates corresponding to time values:\n', dates
gridspi.close()
return