現在、水文モデル (HBV-light) の入力ファイルを外部キャリブレーション ソフトウェア (PEST) と互換性を持たせようとしています。HBV-light では入力ファイルが XML 形式である必要がありますが、PEST ではテキスト ファイルしか読み取れません。私の問題は、PEST によって (CSV 形式で) 書き込まれたパラメーター セットを、HBV-light で読み取ることができる XML ファイルに自動的に変換するスクリプトの作成に関連しています。
PEST で書き込むことができるテキスト ファイルの短い例を次に示します。
W,X,Y,Z
1,2,3,4
そして、これは私がXMLファイルを整理しようとしている方法です:
<Parameters>
<GroupA>
<W>1</W>
<X>2</X>
</GroupA>
<GroupB>
<Y>3</Y>
<Z>4</Z>
</GroupB>
</Parameters>
プログラミングの経験はあまりありませんが、これまでに書いた Python コードを次に示します。
import csv
csvFile = 'myCSVfile.csv'
xmlFile = 'myXMLfile.xml'
csvData = csv.reader(open(csvFile))
xmlData = open(xmlFile, 'w')
xmlData.write('<?xml version="1.0" encoding="utf-8"?>' + "\n")
# there must be only one top-level tag
xmlData.write('<Catchment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">' + "\n")
xmlData.write('<CatchmentParamters>' + "\n")
rowNum = 0
for row in csvData:
if rowNum == 0:
tags = row
# replace spaces w/ underscores in tag names
for i in range(0, 2):
tags[i] = tags[i].replace(' ', '_')
else:
for i in range(0, 2):
xmlData.write(' ' + '<' + tags[i] + '>' \
+ row[i] + '</' + tags[i] + '>' + "\n")
rowNum +=1
xmlData.write('</CatchmentParameters>' + "\n")
xmlData.write('<VegetationZone>' + "\n")
xmlData.write('<VegetationZoneParameters>' + "\n")
rowNum = 0
for row in csvData:
if rowNum == 0:
tags = row
# replace spaces w/ underscores in tag names
for i in range(3, 5):
tags[i] = tags[i].replace(' ', '_')
else:
for i in range(3, 5):
xmlData.write(' ' + '<' + tags[i] + '>' \
+ row[i] + '</' + tags[i] + '>' + "\n")
rowNum +=1
xmlData.write('</VegetationZoneParameters>' + "\n")
xmlData.write('</VegetationZone>' + "\n")
xmlData.write('</Catchment>' + "\n")
xmlData.close()
グループ A (具体的には CathmentParameters) を書き込むことはできますが、グループ B セクションは書き込まれません。何をすべきかわからない!