2017-11-27 9 views
0

Ich versuche NetCDF-Dateien in CSV zu konvertieren. Dateien sind in Threeds Server gespeichert. Ich habe unter Code geschrieben, der Dateien von Thredds Server liest und wählen Sie sechs Variablen aus der Liste der Variablen in NetCDF-Dateien und gespeichert sie lokal im CSV-Format.Convert netCDF-Datei in Csv mit Python

from datetime import datetime 
from netCDF4 import Dataset 
import netCDF4 
import pandas as pd 
import csv 
def get_thredds_url(datetime_group, forecast_hour): 
    base_url="path" 
    thredds_url="path" 
    cycle_hour = "%02d" % datetime_group.hour 
    file_str=datetime_group.strftime("%Y%m%d%H")+"/gfs.t%sz.pgrb2.0p25.f%03d" % \ 
     (cycle_hour, forecast_hour) 
    url = base_url + thredds_url + file_str 
    return (url) 

Der folgende Code zeigt die erforderlichen Variablen.

def main(): 

    datetime_group = datetime(2017, 9, 26, 0) 
    forecast_hour = 240 

    url = get_thredds_url(datetime_group, forecast_hour) 
    print (url) 

    nc_handle=Dataset(url) 
    #print (nc_handle.variables.keys()) 
    lat=nc_handle.variables['lat'][:] 
    lon=nc_handle.variables['lon'][:] 
    issue_time=nc_handle.variables['time'][:] 
    valid_time=nc_handle.variables['time1'][:] 
    temp=nc_handle.variables['Temperature_height_above_ground'][:] 
    dewpoint_temp=lat=nc_handle.variables['Dewpoint_temperature_height_above_ground'][:] 
    dtime = netCDF4.num2date(issue_time[:],units=units) 


tmp = pd.Series(temp, index=dtime) 

    tmp.to_csv('temp.csv',index=True, header=True) 
    csvwriter = csv.writer(tmp, delimiter=',') 
    print (csvwriter) 





if __name__ == "__main__": 
    main() 

Problem: Ich bin nicht in der Lage Datei in csvnformat zu schreiben, die die Variablen, zB lat, lon enthält, Zeit, time1, Temperature_height_above_ground. Gewünschte Ausgabe ist unten angegeben:

tmp.csv 

lat lon time time1 Temperature_height_above_ground 
1 ... .. ... .... ...... 
2 ... .. ... .... ...... 
3 ... .. ... .... ...... 

Kann mir jemand dabei helfen?

Vielen Dank im Voraus!

+0

Die Frage ist nicht klar macht, was genau das Problem ist. Unter https://stackoverflow.com/help/how-to-ask finden Sie eine Anleitung und bearbeiten Sie Ihre Frage, um z. eine Fehlermeldung. Und während Sie dabei sind, beheben Sie den Einzug Ihres Beitrags, da die Zeile "Problem: Ich bin nicht in der Lage ..." momentan aussieht, als wäre sie Teil des Quellcodes, was ich für falsch halte. – FriendFX

Antwort

0

Ich denke, was Sie suchen ist dies:

with open('temp.csv', 'w') as f: 
    writer = csv.writer(f, delimiter=',') 
    # write the header 
    writer.writerow(['lat', 
        'lon', 
        'time', 
        'time1', 
        'temp_height_above_ground', 
        'dewpoint_temp_height_above_ground', 
        'issue_time']) 

    # collect the columns as rows 
    rows = zip(lat,lon,issue_time,valid_time,temp,dewpoint_temp,dtime) 

    for row in rows: 
    writer.writerow(row)