python轉換.nc文件爲.csv

說明:

.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')

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章