-
Notifications
You must be signed in to change notification settings - Fork 0
/
01_Pre_Adapter.py
99 lines (75 loc) · 3.88 KB
/
01_Pre_Adapter.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
from xml.etree.ElementTree import * # Import everything
import time
from datetime import datetime
import csv
import os
import numpy as np
import pandas as pd ## Abbreviate it using the convention
pd.options.display.date_dayfirst=True # Important to some assumptions below
# Check what version of the module you are running, lets check Pandas.
pd.__version__
# It is a good idea to put your variables up front
fewsNamespace="http://www.wldelft.nl/fews/PI"
regionHome = r'C:\Users\Lindsay\Documents\GitHub\DFUDA_2019_Adapter/'
XMLs = ['importState','import']
for xml in XMLs:
fin = os.path.join(regionHome,'1_Input',xml+'.xml')
FEWS_Export = fin # regionHome+'1_Input/importState.xml'
parameterNames = ['HNPD_OUT','Reservoir.inflow.forecast', 'Reservoir.outflow.forecast', 'Gate.setting.forecast',]
spreadsheetNames = {'Reservoir.inflow.forecast':'LakeInflows', 'Reservoir.outflow.forecast':'RegulatorFlows', 'Gate.setting.forecast':'Gates', 'HNPD_OUT':'LakeLevels'}
for parametername in parameterNames:
ParList=[]
par =[]
locId=[]
i = 0
with open(FEWS_Export, "r") as file:
tree = parse(file)
PItimeSeries = tree.getroot()
Parameters=PItimeSeries.findall('.//{' + fewsNamespace + '}parameterId')
for param in Parameters:
ParList.append(param.text)
missingvalue = PItimeSeries.findall('.//{' + fewsNamespace + '}missVal')
series = PItimeSeries.findall('.//{' + fewsNamespace + '}series')
# determine size of aray needed. all series MUST be the same length
parCount=0
for S in series:
events = S.findall('.//{' + fewsNamespace + '}event')
ArrayDates = np.zeros((len(events)),dtype='datetime64[ns]')
par = S.find('.//{' + fewsNamespace + '}parameterId').text
if par==parametername:
parCount = parCount + 1
ArrayValues = np.zeros((len(events), parCount))
j = 0
DateList = []
for S in series:
par = S.find('.//{' + fewsNamespace + '}parameterId').text
if par!=parametername:
pass
else:
events = S.findall('.//{' + fewsNamespace + '}event')
locs = S.findall('.//{' + fewsNamespace + '}locationId')
i=0
for l in locs:
locId.append(l.text)
for ev in events:
if ev.attrib['value'] == S.find('.//{' + fewsNamespace + '}missVal').text:
ArrayValues[i,j] = float(0)
else:
ArrayValues[i,j] = float(ev.attrib['value'])
strucTime_Tuple = datetime.strptime(ev.attrib['date'] + " " + ev.attrib['time'],"%Y-%m-%d %H:%M:%S")
ArrayDates[i] = strucTime_Tuple
i += 1
j += 1
row = i
col = j
DFd = pd.DataFrame(ArrayDates)
DFd.columns = ['DateTime']
DFv = pd.DataFrame(ArrayValues)
DFv.columns = locId
DF = pd.concat([DFd,DFv],axis=1)
if xml == 'importState' and parametername == 'HNPD_OUT':
GoldSIMSpreadSheet = regionHome+'2_Model/'+spreadsheetNames[parametername]+'.xlsx'
DF.to_excel(GoldSIMSpreadSheet,sheet_name='FEWS_Export')
elif parametername != 'HNPD_OUT':
GoldSIMSpreadSheet = regionHome+'2_Model/'+spreadsheetNames[parametername]+'.xlsx'
DF.to_excel(GoldSIMSpreadSheet,sheet_name='FEWS_Export')