1+ import PySimpleGUI as sg
2+ import sys
3+ import imdlib as imd
4+ import csv
5+ import pandas as pd
6+ import os , glob
7+ import os .path
8+ from os import path
9+ os .makedirs ("temp" , exist_ok = True )
10+ if len (sys .argv ) == 1 :
11+ sg .ChangeLookAndFeel ('GreenTan' )
12+ form = sg .FlexForm ('IMD-GRD-EXTRACT' , default_element_size = (40 , 1 ))
13+ choices = list (reversed (range (1901 ,2021 )))
14+ layout = [
15+ [sg .Text ('Downloading IMD gridded Data as CSV Files' , size = (40 , 1 ), font = ("Helvetica" , 20 ))],
16+ [sg .Text ('Start year' ,size = (15 ,1 )),sg .Text ('end year' ,size = (15 ,1 ))],
17+ [sg .InputCombo ((choices ),size = (10 , 4 )),sg .InputCombo ((choices ),size = (10 , 4 ))],
18+ [sg .Text ('Document to open' )],
19+ [sg .In (), sg .FileBrowse ()],
20+ [sg .Submit (), sg .Cancel ()]
21+ ]
22+ button , values = form .Layout (layout ).Read ()
23+ start_yr = values [0 ]
24+ end_yr = values [1 ]
25+ csv_file = values [2 ]
26+ lats = []
27+ lons = []
28+ with open (csv_file , 'r' ) as f :
29+ reader = csv .DictReader (f )
30+ for row in reader :
31+ lats .append (float (row .get ('lat' )))
32+ lons .append (float (row .get ('lon' )))
33+ pars = ["rain" ,"tmax" ,"tmin" ]
34+ for i in range (len (lats )):
35+ for variable in pars :
36+ os .makedirs (variable , exist_ok = True )
37+ lat = lats [i ]
38+ lon = lons [i ]
39+ #variable = 'rain' # other options are ('tmin'/ 'tmax')
40+ for y in range (start_yr ,end_yr + 1 ,1 ):
41+ if not path .exists (variable + "\\ " + str (y ) + ".GRD" ):
42+ print ("file: " + variable + "\\ " + str (y ) + ".GRD" + " doesn't exist, downloading" )
43+ data = imd .get_data (variable , y , y , fn_format = 'yearwise' )
44+ data = imd .open_data (variable , y , y ,'yearwise' )
45+ data .to_csv ("temp\\ " + variable + '-' + str (y ) + '.csv' , lat , lon ,)
46+ continue
47+ print ("imd-get- " + str (y ))
48+ data = imd .open_data (variable , y , y ,'yearwise' ) #data = imd.open_data(variable, start_yr, end_yr,'yearwise') #ds = data.get_xarray()
49+ data .to_csv ("temp\\ " + variable + '-' + str (y ) + '.csv' , lat , lon ,)
50+ fl = glob .glob (os .path .join ("temp\\ " + variable + "-*" + str (f'{ lats [i ]:.2f} ' ) + '_' + str (f'{ lons [i ]:.2f} ' ) + '.csv' ))
51+ cb_var = pd .concat ([pd .read_csv (f ) for f in fl ])
52+ cb_var .to_csv ("temp\\ " + variable + '_' + str (f'{ lats [i ]:.2f} ' ) + '_' + str (f'{ lons [i ]:.2f} ' ) + '.csv' , index = False )
53+ for f in fl :
54+ os .remove (f )
55+ f1 = pd .read_csv ("temp\\ " + 'tmax_' + str (f'{ lats [i ]:.2f} ' ) + '_' + str (f'{ lons [i ]:.2f} ' ) + '.csv' )
56+ f2 = pd .read_csv ("temp\\ " + 'tmin_' + str (f'{ lats [i ]:.2f} ' ) + '_' + str (f'{ lons [i ]:.2f} ' ) + '.csv' )
57+ f3 = pd .read_csv ("temp\\ " + 'rain_' + str (f'{ lats [i ]:.2f} ' ) + '_' + str (f'{ lons [i ]:.2f} ' ) + '.csv' )
58+ mer1 = f1 .merge (f2 ,on = 'DateTime' )
59+ mer2 = mer1 .merge (f3 ,on = 'DateTime' )
60+ mer2 .to_csv (str (f'{ lats [i ]:.2f} ' ) + '_' + str (f'{ lons [i ]:.2f} ' ) + '.csv' ,header = ['Date' ,'Tmax' ,'Tmin' ,'Rain' ],index = False )
61+
62+
63+ filelist = glob .glob (os .path .join ("*_" + str (f'{ lats [i ]:.2f} ' ) + '_' + str (f'{ lons [i ]:.2f} ' ) + '.csv' ))
64+ for f in filelist :
65+ os .remove (f )
66+ print ("created the file: " + str (f'{ lats [i ]:.2f} ' ) + '_' + str (f'{ lons [i ]:.2f} ' ) + '.csv and deleted the temp files' )
67+ for f in os .listdir ("temp" ):
68+ os .remove (os .path .join ("temp" , f ))
69+ sg .Popup ('done' )
70+ sg .close
0 commit comments