2016-09-11 23 views
-1

与えられた長さの時間(値のリストも含む)の読み込み値(xmlドキュメントで与えられた)を読み込む変数を取得しようとしています。 tのリストは、15分の間隔で 'start'から 'end'までの値です。本質的に私が望むのは、それぞれの時間リストの全長にわたって1つの負荷値を印刷したいということです。したがって、その時間リストが[0 15 30 45 60]の場合、その負荷値を5回繰り返すリストに入れます。私が実行しているXML文書とコードは以下の通りです。私は、 "float 'オブジェクトがiterableではないと言っている私のpotWの割り当てでエラーが発生し続けています。私はこれがたくさんありますが、何か提案があることを知っていますか?'float'オブジェクトは反復可能なエラーではありません

import xml.etree.ElementTree as ET 
import os 

class WaterModel: 

    def __init__(self,fn): 

     self.tree = ET.parse(fn) 
     self.root = self.tree.getroot() 

     self.title, self.start, self.end, self.load, self.duration, self.Type = [],[],[],[],[],[] 

     for child in self.root: 
      self.title.append(child.find('title').text) 

      sh = int(child.find('startHour').text) 
      sm = int(child.find('startMinute').text) 
      self.duration.append(int(child.find('duration').text)) 
      self.start.append(sh*60+sm) 
      self.end.append(self.start[-1] + self.duration[-1]) 
      self.Type.append(child.find('Type').text) 
      self.load.append(float(child.find('load').text)) 


    def Wp(self): 

     greyW = 0 
     for i in range(len(self.root)): 
      if self.Type[i] == 'greywater': 
       greyW += self.load[i]*self.duration[i] 

     t = range(self.start[i], self.end[i]+1, 15) 
     for i in range(len(self.root)): 
      for j in range(len(t)): 
       if self.Type[i] == 'potable': 
        potW = [a for a in self.load[j]] 

fn = 'SD2017NominalWaterUse.xml' 
a = WaterModel(fn) 
b = a.Wp() 
print(b) 

上記のコードに読み込まれるXMLファイル「SD2017NominalWaterUse.xml」:あなたがしようとしているものである

<WaterNominalDay> 

<event> 
<title>Evening Washer</title> 
<Type>greywater</Type> 
<startHour>19</startHour> 
<startMinute>30</startMinute> 
<duration units = 'min'>270</duration> 
<load units = 'gal/min'>.051852</load> 
<comment> 
'' 
</comment> 
</event> 

<event> 
<title>Morning Cooking</title> 
<Type>potable</Type> 
<startHour>7</startHour> 
<startMinute>30</startMinute> 
<duration units = 'min'>180</duration> 
<load units = 'gal/min'>.003331</load> 
<comment> 
'5 lb water is .5995 gal' 
</comment> 
</event> 

<event> 
<title>Evening Cooking</title> 
<Type>potable</Type> 
<startHour>19</startHour> 
<startMinute>30</startMinute> 
<duration units = 'min'>180</duration> 
<load units = 'gal/min'>.003331</load> 
<comment> 
'5 lb water is .5995 gal' 
</comment> 
</event> 


<event> 
<title>Leaks</title> 
<Type>potable</Type> 
<startHour>0</startHour> 
<startMinute>00</startMinute> 
<duration units = 'min'>1440</duration> 
<load units = 'gal/min'>.006944</load> 
<comment> 
'' 
</comment> 
</event> 

</WaterNominalDay> 
+0

'[a in a X]'は 'X'の浅いコピーではありませんか? 'X [:]'は同じことを達成しないでしょうか(それがあなたがしようとしているものなら)? –

答えて

0

self.load私はfloatの配列なので、self.load[j]がフロートになります繰り返しを繰り返す。したがって、エラーメッセージ。

+0

はいself.loadには4つの値がありますが、それらの値をそれぞれの時間リストの長さの間繰り返す必要があります。私は4つの異なるインスタンスに対して、それぞれの時間に渡って単一の負荷値を反復しようとしています。これは間違った方法ですか? –

+0

明らかに間違っています。私があなたがしようとしていることがはっきりしていないので、代わりに何をすべきかは言えません。たぶんあなたがあなたの事例で望んでいた結果を、単にそれを説明するのではなく*示したならば。 –

関連する問題