說明:
.nc文件裏面的數據是以變量(Variables)形式存儲。
比如維度裏面有:w,x,y,z
那w,x,y,z的存儲結構是Variables
由 f(w,x,y,z)=values
這裏的values也是Variables
# -*- coding: utf-8 -*-
"""
sumeila
"""
# from mpl_toolkits.basemap import Basemap
from netCDF4 import Dataset
import matplotlib.pyplot as plt
import numpy as np
from netCDF4 import date2index
from netCDF4 import num2date, date2num
from datetime import datetime
from matplotlib import dates
import csv
import glob
import sys
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號
def to_csv(source_file):
# 讀取nc數據
dataset = Dataset(source_file)
print(dataset.variables.keys())
# 獲取相應數組集合--緯度經度溫度深度
# Dimension
time = nc_obj.variables['time'][:]
lev = nc_obj.variables['depth'][:]
lat = nc_obj.variables['latitude'][:]
lon = nc_obj.variables['longitude'][:]
# Variables
vo = nc_obj.variables['vo'][:]
uo = nc_obj.variables['uo'][:]
print('-------------------------------------------------------------------')
# 文件名不含擴展名
source_file = source_file.split('.')
file_name = source_file[0]
print(lev)
# 創建csv目標文件
try:
# 打開目標csv文件
with open("New_"+file_name+'.csv', 'a', newline='') as targetFile:
# 創建寫入流
writer = csv.writer(targetFile)
# 寫入表頭
writer.writerow(('time', 'lat', 'lon', '{}m'.format(lev), 'vo', 'uo'))
# 寫入數據
for i in range(len(time)):
for j in range(len(lev)):
for k in range(len(lat)): # k爲緯度
for l in range(len(lon)): # l爲經度
if str(vo[i][j][k][l]) not in '--':
writer.writerow((str(num2date(tim[i], units=tim.units, calendar=tim.calendar))[0:20], lev[j], lat[k], lon[l], vo[i][j][k][l], uo[i][j][k][l]))#dates.num2date(time[i], tz=None)
targetFile.close() # 關閉文件
print('Get'+file_name+'.csv Success!')
except Exception as e: # 拋異常
print('Error :'+str(e))
if '__name__ ==__main__':
print("start transformation...")
to_csv('global-analysis-forecast-phy-001-024_1571504740261.nc')
print('Transformed successfully')