環境
Ubuntu18.04LTS
Python3
環境構築
Python3でNetCDF形式のファイルを使用するためにはNetCDF4モジュールが必要。
このモジュールはpip3で簡単にインストールできた。
PythonでNetCDFファイルのI/O
以下は緯度、経度、時間の三次元変数T2が格納されたNetCDFファイルを開いて、新たにtest_ncout.ncというファイルを作成するプログラム。
# coding: utf-8
# This is a sample program to read and write s netCDF file with Python3
from netCDF4 import Dataset
import numpy as np
# *~*~*~*~*~*~*~*~*~*~*~*~*~*~*
# read netCDF file
# *~*~*~*~*~*~*~*~*~*~*~*~*~*~*
# open a netCDF file to read
ifile = "test.nc"
ncin = Dataset(ifile, 'r')
# check
# print(ncin.file_format)
# get variables
# print(ncin.variables.keys())
# get axis data
tin = ncin.variables['time']
latin = ncin.variables['lat']
lonin = ncin.variables['lon']
# get length of axis data
ntime = len(tin)
nlat = len(latin)
nlon = len(lonin)
# check axis
# print(tim[:])
# print(latin[:])
# print(lonin[:])
# read data
vin = ncin.variables['T2']
# check data
# print(vin[:,:,:,:])
# *~*~*~*~*~*~*~*~*~*~*~*~*~*~*
# write netCDF file
# *~*~*~*~*~*~*~*~*~*~*~*~*~*~*
# open a netCDF file to write
ncout = Dataset('test_ncout.nc', 'w', format="NETCDF4")
# check file format
# print(ncout.file_format)
# define axix size
ncout.createDimension('time',ntime)
ncout.createDimension('lat', nlat)
ncout.createDimension('lon', nlon)
# create time axis
time = ncout.createVariable('time', np.dtype('f4').char, ('time'))
time.long_name = 'time'
time.units = 'months since 1850-1-1'
time.axis = 'T'
# create lat axis
lat = ncout.createVariable('lat', np.dtype('f4').char, ('lat'))
lat.long_name = 'latitude'
lat.units ='degrees_north'
lat.axis = 'Y'
# create lon axis
lon = ncout.createVariable('lon', np.dtype('f8').char, ('lon'))
lon.long_name = 'longitude'
lon.units = 'degrees_east'
lon.axis = 'X'
# create variable arry
vout = ncout.createVariable('T2', np.dtype('f4').char, ('time', 'lat', 'lon'))
vout.long_name = '2m temperature'
vout.units = 'K'
# copy axis from original data
time[:] = tin[:]
lon[:] = lonin[:]
lat[:] = latin[:]
vout[:] = vin[:]
ncin.close()
ncout.close()
リファレンス
http://unidata.github.io/netcdf4-python/
https://github.com/Unidata/netcdf4-python