Discuss / Python / 练习

练习

Topic source
from xml.parsers.expat import ParserCreate

class WeatherSaxHandler(object):

    def __init__(self):
        self._weathers=[]

    def start_element(self,name,attrs):
        if name=='yweather:location':
            self._city=attrs['city']
            self._country=attrs['country']
        elif name=='yweather:condition':
            self._today=attrs['date'].split(',')[0]
            print(self._today)
        elif name=='yweather:forecast':
            if len(self._weathers)==0:
                if attrs['day']==self._today:
                    self._weathers=[]
            aweather={}
            aweather['text']=attrs['text']
            aweather['high']=attrs['high']
            aweather['low']=attrs['low']
            self._weathers.append(aweather)


def parse_weather(xml):
    handler=WeatherSaxHandler()
    parser = ParserCreate()
    parser.StartElementHandler=handler.start_element
    parser.Parse(xml)
    return {
        'city':handler._city,
        'contry':handler._country,
        'today':{
            'text': handler._weathers[0]['text'],
            'low': handler._weathers[0]['high'],
            'high': handler._weathers[0]['low']
        },
        'tomorrow':{
            'text': handler._weathers[0]['text'],
            'low': handler._weathers[0]['high'],
            'high': handler._weathers[0]['low']
        }
    }
from xml.parsers.expat import ParserCreate

class WeatherSaxHandler(object):

    def __init__(self):
        self._weathers=[]

    def start_element(self,name,attrs):
        if name=='yweather:location':
            self._city=attrs['city']
            self._country=attrs['country']
        elif name=='yweather:condition':
            self._today=attrs['date'].split(',')[0]
            print(self._today)
        elif name=='yweather:forecast':
            if len(self._weathers)==0:
                if attrs['day']==self._today:
                    self._weathers=[]
            aweather={}
            aweather['text']=attrs['text']
            aweather['high']=attrs['high']
            aweather['low']=attrs['low']
            self._weathers.append(aweather)


def parse_weather(xml):
    handler=WeatherSaxHandler()
    parser = ParserCreate()
    parser.StartElementHandler=handler.start_element
    parser.Parse(xml)
    return {
        'city':handler._city,
        'contry':handler._country,
        'today':{
            'text': handler._weathers[0]['text'],
            'low': handler._weathers[0]['high'],
            'high': handler._weathers[0]['low']
        },
        'tomorrow':{
            'text': handler._weathers[1]['text'],
            'low': handler._weathers[1]['high'],
            'high': handler._weathers[1]['low']
        }
    }

参考楼主的程序,发现当今天不是WED时,程序错了。更改此处bug。 from xml.parsers.expat import ParserCreate

class WeatherSaxHandler(object): def init(self): self._weathers=[] self.record=False;

def start_element(self,name,attrs):
    if name=='yweather:location':
        self._city=attrs['city']
        self._country=attrs['country']
    elif name=='yweather:condition':
        self._today=attrs['date'].split(',')[0]
    elif name=='yweather:forecast':
        if attrs['day']==self._today:
            self.record=True;
    if(self.record):
        self._weathers.append(attrs)       

def end_element(self,name):
    pass

def char_data(self,text):
    pass

def get_weather(xml): handler=WeatherSaxHandler() parser=ParserCreate() parser.StartElementHandler=handler.start_element parser.Parse(xml) return{ 'city':handler._city, 'country':handler._country, 'today':{ 'low':handler._weathers[0]['low'], 'high':handler._weathers[0]['high'], 'text':handler._weathers[0]['text'] }, 'tomorrow':{ 'low':handler._weathers[1]['low'], 'high':handler._weathers[1]['high'], 'text':handler._weathers[1]['text'] }
}

def main():
print(get_weather(xml))

if name=='main': main()


  • 1

Reply