python 2.7打破字符串并计算平均值

时间:2013-06-19 10:10:44

标签: python string python-2.7 extraction

使用此代码我必须得到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 = ""

2 个答案:

答案 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')