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 回答