python 生成nc文件 样本程序

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

    

猜你喜欢

转载自blog.csdn.net/weixin_40645816/article/details/82109701