1

いくつかの操作の後、パターンのリストを取得します。

[(u'DAY1 KWH', u'300.000000'), 
(u'DAY2 KWH', u'300.000000'), 
(u'DAY3 KWH', u'300.000000'), 
(u'DAY4 KWH', u'300.000000'), 
(u'DAY5 KWH', u'300.000000'), 
(u'DAY6 KWH', u'300.000000'), 
(u'DAY7 KWH', u'300.000000'), 
(u'DAY8 KWH', u'300.000000'), 
(u'DAY9 KWH', u'300.000000'), 
(u'DAY10 KWH', u'300.000000'), 
(u'DAY11 KWH', u'300.000000'), 
(u'DAY12 KWH', u'300.000000'), 
(u'DAY13 KWH', u'300.000000'), 
(u'DAY14 KWH', u'300.000000'),
...

すべての要素に「日」または「kwh」という単語が含まれているわけではありません。実際には、その月の天然ガスの使用量や 1 週間の水の使用量などの測定値である可能性があります。日」の値を 1 つのリストに配置し、すべての「週」の値を別のリストに配置し、すべての「月」の値を 3 番目のリストに配置します。最終目標は、毎日、毎週、毎月のユーティリティの使用状況をグラフ化できるようにすることです。これらはテスト値であることに注意してください。

私がコメントアウトした 5 つの異なる方法はどれも実際には機能しませんでしたが、それぞれの試みは異なるスタック オーバーフロー スレッドを読み取った結果でした。

コードをより効率的/高速にできることは間違いありません。最適化に関する提案があれば、遠慮なく追加してください。あなたの助けは大歓迎です!

import urllib
import urllib2
from xml.dom import minidom
import matplotlib.pyplot as plt

def main(): 

    path = "http://128.226.6.214/bacrest/bacnet_device_70200/"
    BACrest = 'urn:BACrestService'
    xlink = 'http://www.w3.org/1999/xlink'

    dom = minidom.parse(urllib.urlopen(path)) 

    values = [] 
    descriptions = []
    for node in dom.getElementsByTagNameNS(BACrest, 'ChildNode'):  

        href = node.getAttributeNS(xlink, 'href')

        descriptionDomain = href + '/Description'
        descriptionSubDom = minidom.parse(urllib.urlopen(descriptionDomain))
        descriptionElements = descriptionSubDom.getElementsByTagNameNS(BACrest, 'return')
        descriptions.append(descriptionElements) 

        valueDomain = href + '/Value'
        valueSubDom = minidom.parse(urllib.urlopen(valueDomain))
        valueElements = valueSubDom.getElementsByTagNameNS(BACrest, 'return')[0].firstChild.data
        values.append(valueElements)

    combination = zip(descriptions,values)

解決の試み

    #print filter(lambda x: 'DAY1 ' in x, combination)

    #dayInfo = []
    #for sublist in combination:
        #if 'DAY1 ' in sublist:
            #dayInfo.append(sublist)
    #print dayInfo

    #dayInfo = [s for s in combination if 'DAY1 ' in s]
    #print dayInfo

    #dayInfo = [i for i,v in combination if i.startswith('DAY1') in i]
    #print dayInfo

    #dayInfo = []
    #if any('DAY1 ' in x for x in combination):
        #dayInfo.append(x)
    #print dayInfo

main()
4

1 に答える 1

0

あなたが説明したようにdata、がフォームのリストである場合[(u'DAY1 KWH', u'300.000000'), (u'DAY2 KWH', u'300.000000'), ...]、次のコードが機能するはずです。

for desc, val in data:
    if 'DAY' in desc:
        # do something with val
    elif 'WEEK' in desc:
       # do something else with val
    # etc...

これは、キャピタライゼーションなどの不一致が原因で失敗するため、特に堅牢ではないことに注意してください。正規表現マッチングを使用するかdesc、文字列検索を実行する前に各反復でアップケースを使用することは、入力が常に大文字であることが絶対的に確実でない限り、おそらく非常に優れています。

于 2012-06-03T04:43:46.920 に答える