气象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)