使用此代码我必须得到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 = ""
答案 0 :(得分: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)
答案 1 :(得分: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')