气象nc文件转为csv格式

#需要安装netCDF4安装包
from netCDF4 import Dataset
import numpy as np
import os
from pandas import Series
import netCDF4 
import csv


#navigating to folder location. You may have to change this.
#base_dir = os.path.abspath(os.path.dirname())

#for file in os.listdir(base_dir):
 #   if file.endswith("sst.mnmean.nc"):
        #dataset = netCDF4.Dataset(base_dir+"/"+file)
dataset = Dataset(rair.mon.mean.nc,mode=r,format="NETCDF4")
#提供所知道的nc文件变量,必须得先知道变量名称
lat = dataset.variables[lat][:]
lon = dataset.variables[lon][:]
time = dataset.variables[time]
#time_bnds = dataset.variables[time_bnds]
air = dataset.variables[air]
       
#原例子        
#
#         Ice data
#         If you print the variable ice, youll find: 
#           int16 ice(time, zlev, lat, lon)
#           ...
#           current shape = (1, 1, 720, 1440)
#         Thus, we insert time[0], zlev[0], lat[i] and lon[j] into our csv with the corresponding labels
#with open(ice_data.csv, mode=w) as ice_file:
#            ice_writer = csv.writer(ice_file, delimiter=,, quotechar=", quoting=csv.QUOTE_MINIMAL)
#            ice_writer.writerow([time, zlev, lat, lon, ice])
#
#            for i in range(0,720):
#                print("row " , i+1, " of 720")
#                for j in range(0,1440):
#                    # print(time_var[0] , 	, zlev[0], 	, lat[600], 	, lon[i],	, ice[0,0,600,i] )
#                    ice_writer.writerow([time_var[0], zlev[0], lat[i], lon[j], ice[0,0,i,j]])
#            ice_writer.close()



with open(air.csv, mode=w) as ice_file:
    ice_writer = csv.writer(ice_file, delimiter=,, quotechar=", quoting=csv.QUOTE_MINIMAL)
    ice_writer.writerow([time, lat, lon, surface])
#输入经纬度的维数
    for i in range(0,360):
        print("row " , i+1, " of 360")
        for j in range(0,720):
                    # print(time_var[0] , 	, zlev[0], 	, lat[600], 	, lon[i],	, ice[0,0,600,i] )
                ice_writer.writerow([time[859],lat[i], lon[j], air[859,i,j]])
#    ice_writer.close()


#转换csv格式之前需要编写以下代码获取nc文件的信息
#dst=Dataset(rsst.mnmean.nc,mode=r,format="NETCDF4")
#for attr in dst.ncattrs():
#得到.nc文件的信息
#    print(%s: %s % (attr,dst.getncattr(attr)))
#获取nc文件的变量,也就是表头的变量,如经纬度、温度等
#for var in dst.variables:
#   print(var,end=:
)
#   for attr in dst[var].ncattrs():
#       print(%s: %s % (attr,dst[var].getncattr(attr)))
#   print()
#获取变量的长度,用于读取这些变量     
#dims=[lat,lon,time,air]  
#for dim in dims:
#   print(%s:%s %(dim,dst.dimensions[dim].size))

1.最后附上用panoply的下载链接,这是一个简便的可视化nc文件,好像得下载java才能用(https://www.giss.nasa.gov/tools/panoply/download/) 2.这个是下载气象数据的网站,包含温度、降雨等(https://www.esrl.noaa.gov/psd/data/gridded/data.ghcncams.html)

经验分享 程序员 微信小程序 职场和发展