0

このコードを使用して、PSI の結果を取得する必要があります: 101-121 (不健康)。平均を計算するには、var_psi から 101 と 121 の値が必要です。私を導くことができる101と121を抽出する方法を知っている人はいますか? よろしくお願いします=)

import xml.dom.minidom, xml.sax.saxutils
import logging
import httplib
from socket import timeout
import datetime
import time
import urllib2
import sys, os, platform, re
import sched, time
import simplejson as json
import urllib
from xml.dom import minidom
from urllib2 import urlopen

var_xml = urlopen("http://app2.nea.gov.sg/data/rss/nea_psi.xml")
var_all = xml.dom.minidom.parse(var_xml)

def extract_content(var_all, var_tag, var_loop_count):
    return var_all.firstChild.getElementsByTagName(var_tag)[var_loop_count].firstChild.data

var_loop_count = 0
var_item = " "
while len(var_item) > 0:
    var_title = extract_content(var_all, "title", var_loop_count)
    var_date = extract_content(var_all, "pubDate", var_loop_count)
    var_psi = extract_content(var_all, "psi", var_loop_count)
    var_psi1= extract_content(var_all, "psi", var_loop_count)


    print var_psi

    var_loop_count += 1
    break

    try:
        var_item = var_all.firstChild.getElementsByTagName("item")[var_loop_count].firstChild.data
    except:      
        var_item = ""
4

2 に答える 2

1

正規表現を使用できます。

import re

psi_values = re.compile(r'PSI.*?(\d+)-(\d+)')

psi_low, psi_high = psi_values.search(var_psi).groups()

値を整数にする必要がある場合は、一致した各グループに関数をmap(int, ...)適用するために使用します。int()

psi_low, psi_high = map(int, psi_values.search(var_psi).groups())

コードサンプルの場合、次のようになります。

>>> psi_low, psi_high
(101, 121)
于 2013-06-19T10:15:05.487 に答える
0

reそのためにモジュールを使用できます:

>>> import re
>>> test_string = '101-121 (Unhealthy)'
>>> psi_re = re.compile(r'(\d+)-(\d+) \(Unhealthy\)')
>>> psi_re.match(test_string)
<_sre.SRE_Match object at 0xb23140>
>>> psi_re.match(test_string).groups()
('101', '121')
于 2013-06-19T10:16:51.460 に答える