0

スクリプトは、1 つのステーションの気象情報のみを取得します。リンクにリストされているすべてのものを取得し、以下のスクリプトの形式で値をファイルに書き込みたいと思います。

#! /usr/bin/python

#import module to open urls
from urllib import urlopen

#import module to parse xml
import xml.etree.ElementTree as ET

#settings
airport = 'KORF,KPHF,KRIC,KDCA,KIAD,KADW,KBWI,KACY,KPHL,KMDT,KPIT,KEWR,KJFK,KLGA,KBOS'

#open xml file
xml_link = urlopen('http://weather.aero/dataserver_current/httpparam?dataSource=metars&requestType=retrieve&format=xml&hoursBeforeNow=1&stationString=KORF,KPHF,KRIC,KDCA,KIAD,KADW,KBWI,KACY,KPHL,KMDT,KPIT,KEWR,KJFK,KLGA,KBOS')

#parse data and assign root to element tree module
tree = ET.parse(xml_link)
root = tree.getroot()

#search for data under <data> and <METAR> tags
data = root.findall('data/METAR')

for metar in data:
    raw_text = metar.find('raw_text').text
    station = metar.find('station_id').text
    category = metar.find('flight_category').text

    file = open('metar.txt', 'w')
    file.write("%s is now reporting %s condition:" % (station, category))
    file.write("\n%s" %raw_text)
    file.close()
4

1 に答える 1

2

このコメントで説明されているように、問題は XML 値をどのように反復処理しているかではなくmetar.txt、ループのたびに上書きしているという事実です。

代わりに、ループの外でファイルを開いたり閉じたりする必要があります。このwithステートメントは、あなたに代わって締めくくりをしてくれるので、ここであなたを助けることができます:

with open('metar.txt', 'w') as f:
    for metar in data:
        raw_text = metar.find('raw_text').text
        station = metar.find('station_id').text
        category = metar.find('flight_category').text

        f.write("%s is now reporting %s condition:" % (station, category))
        f.write("\n%s" %raw_text)

(またfile、ファイル オブジェクトの名前として使用しないでください。これfileは、ファイル オブジェクトの組み込み Python タイプであり、使用するとシャドウするためです。)

于 2012-10-29T01:49:02.117 に答える