2015-04-16 6 views
1

Я пытаюсь решить проблему, когда у меня есть данные XML, которые имеют 2 временных ряда (иногда больше) измерений в одном файле. В этом случае измерения температуры и скорости ветра происходят с одного и того же интервала времени. Смотрите файл XML ниже:Анализ XML-файлов с помощью Python

<?xml version="1.0" encoding="UTF-8"?> 
<wfs:FeatureCollection 
    timeStamp="2015-04-16T09:40:29Z" 
    numberMatched="2" 
    numberReturned="2" 
      xmlns:wfs="http://www.opengis.net/wfs/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:om="http://www.opengis.net/om/2.0" 
     xmlns:ompr="http://inspire.ec.europa.eu/schemas/ompr/2.0rc3" 
     xmlns:omso="http://inspire.ec.europa.eu/schemas/omso/2.0rc3" 
     xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:gmd="http://www.isotc211.org/2005/gmd" 
     xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:swe="http://www.opengis.net/swe/2.0" 
     xmlns:gmlcov="http://www.opengis.net/gmlcov/1.0" 
     xmlns:sam="http://www.opengis.net/sampling/2.0" 
     xmlns:sams="http://www.opengis.net/samplingSpatial/2.0" 
     xmlns:wml2="http://www.opengis.net/waterml/2.0" 
    xmlns:target="http://xml.fmi.fi/namespace/om/atmosphericfeatures/0.95" 
     xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd 
     http://www.opengis.net/gmlcov/1.0 http://schemas.opengis.net/gmlcov/1.0/gmlcovAll.xsd 
     http://www.opengis.net/sampling/2.0 http://schemas.opengis.net/sampling/2.0/samplingFeature.xsd 
     http://www.opengis.net/samplingSpatial/2.0 http://schemas.opengis.net/samplingSpatial/2.0/spatialSamplingFeature.xsd 
     http://www.opengis.net/swe/2.0 http://schemas.opengis.net/sweCommon/2.0/swe.xsd 
     http://inspire.ec.europa.eu/schemas/ompr/2.0rc3 http://inspire.ec.europa.eu/draft-schemas/ompr/2.0rc3/Processes.xsd 
     http://inspire.ec.europa.eu/schemas/omso/2.0rc3 http://inspire.ec.europa.eu/draft-schemas/omso/2.0rc3/SpecialisedObservations.xsd 
     http://www.opengis.net/waterml/2.0 http://inspire.ec.europa.eu/draft-schemas/waterml/2.0rfc/waterml2.xsd 
     http://xml.fmi.fi/namespace/om/atmosphericfeatures/0.95 http://xml.fmi.fi/schema/om/atmosphericfeatures/0.95/atmosphericfeatures.xsd"> 

     <wfs:member> 
       <omso:PointTimeSeriesObservation gml:id="WFS-fip7WVVLMFTJudLNbf8qa6jEiVKJTowqYWbbpdOt.Lnl5dsPTTv3c3Trvlw9NGXk6ddNO3L2w7OuXhh08oWliy59O6pp25bX_0KFCMbHy51qRaFOO6dNGTVwzsu7JU07ctr_6FCiGdm26eenJzrMYsGLBg3Zmzfjw7MtambTfjSV3XpmcNbbh8RNPPph3Y8tK1dCA0tuHxF4b8ejnODHM3tuXpl30MPLDty9MvLnWt0y7eGXlh6deWVrbdPPnp3Z6mXx0rGnYZza3dds_NT6Yemnfu5zhNbj1w7NPTzJ3Zt9Y2_Nma3Pph6ad.6p54Za0N_DLuyYemFuc.m_llyceuXl5v6claYWbbpdOt.Lnl5dsPTTv3c3Trvlw9NGXk6ddNO3L2w7OuXhh08mh007ctPpl4T8hNDpp25bW_dlrGq1IYA-"> 

        <om:phenomenonTime> 
     <gml:TimePeriod gml:id="time1-1-1"> 
      <gml:beginPosition>2015-01-01T00:00:00Z</gml:beginPosition> 
      <gml:endPosition>2015-01-02T00:00:00Z</gml:endPosition> 
     </gml:TimePeriod> 
     </om:phenomenonTime> 
     <om:resultTime> 
     <gml:TimeInstant gml:id="time2-1-1"> 
      <gml:timePosition>2015-01-02T00:00:00Z</gml:timePosition> 
     </gml:TimeInstant> 
     </om:resultTime>  

     <om:procedure xlink:href="http://xml.fmi.fi/inspire/process/opendata"/> 
        <om:parameter> 
       <om:NamedValue> 
        <om:name xlink:href="http://inspire.ec.europa.eu/codeList/ProcessParameterValue/value/groundObservation/observationIntent"/> 
        <om:value> 
      atmosphere 
        </om:value> 
       </om:NamedValue> 
      </om:parameter> 

       <om:observedProperty xlink:href="http://data.fmi.fi/fmi-apikey/41156987-d187-45e2-a2d3-6113c39b15ab/meta?observableProperty=observation&amp;param=temperature&amp;language=eng"/> 
       <om:featureOfInterest> 
        <sams:SF_SpatialSamplingFeature gml:id="fi-1-1-temperature"> 
      <sam:sampledFeature> 
     <target:LocationCollection gml:id="sampled-target-1-1-temperature"> 
      <target:member> 
      <target:Location gml:id="obsloc-fmisid-101007-pos-temperature"> 
       <gml:identifier codeSpace="http://xml.fmi.fi/namespace/stationcode/fmisid">101007</gml:identifier> 
      <gml:name codeSpace="http://xml.fmi.fi/namespace/locationcode/name">Helsinki Rautatientori</gml:name> 
      <gml:name codeSpace="http://xml.fmi.fi/namespace/locationcode/geoid">-16011680</gml:name> 
      <gml:name codeSpace="http://xml.fmi.fi/namespace/locationcode/wmo">2934</gml:name> 
      <target:representativePoint xlink:href="#point-101007"/>          


      <target:region codeSpace="http://xml.fmi.fi/namespace/location/region">Helsinki</target:region> 

      </target:Location></target:member> 
     </target:LocationCollection> 
     </sam:sampledFeature> 
         <sams:shape> 

       <gml:Point gml:id="point-1-1-temperature" srsName="http://www.opengis.net/def/crs/EPSG/0/4258" srsDimension="2"> 
           <gml:name>Helsinki Rautatientori</gml:name> 
           <gml:pos>60.17169 24.94460 </gml:pos> 
          </gml:Point> 

         </sams:shape> 
        </sams:SF_SpatialSamplingFeature> 
       </om:featureOfInterest> 
      <om:result> 
        <wml2:MeasurementTimeseries gml:id="obs-obs-1-1-temperature">       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T00:00:00Z</wml2:time> 
         <wml2:value>4.6</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T01:00:00Z</wml2:time> 
         <wml2:value>4.5</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T02:00:00Z</wml2:time> 
         <wml2:value>4.2</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T03:00:00Z</wml2:time> 
         <wml2:value>4.0</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T04:00:00Z</wml2:time> 
         <wml2:value>4.1</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T05:00:00Z</wml2:time> 
         <wml2:value>4.1</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T06:00:00Z</wml2:time> 
         <wml2:value>4.5</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T07:00:00Z</wml2:time> 
         <wml2:value>4.1</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T08:00:00Z</wml2:time> 
         <wml2:value>3.3</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T09:00:00Z</wml2:time> 
         <wml2:value>2.9</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T10:00:00Z</wml2:time> 
         <wml2:value>2.5</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T11:00:00Z</wml2:time> 
         <wml2:value>2.4</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T12:00:00Z</wml2:time> 
         <wml2:value>2.5</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T13:00:00Z</wml2:time> 
         <wml2:value>2.7</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T14:00:00Z</wml2:time> 
         <wml2:value>2.8</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T15:00:00Z</wml2:time> 
         <wml2:value>3.1</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T16:00:00Z</wml2:time> 
         <wml2:value>3.3</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T17:00:00Z</wml2:time> 
         <wml2:value>3.7</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T18:00:00Z</wml2:time> 
         <wml2:value>4.1</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T19:00:00Z</wml2:time> 
         <wml2:value>4.1</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T20:00:00Z</wml2:time> 
         <wml2:value>4.4</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T21:00:00Z</wml2:time> 
         <wml2:value>4.7</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T22:00:00Z</wml2:time> 
         <wml2:value>4.6</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T23:00:00Z</wml2:time> 
         <wml2:value>4.7</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-02T00:00:00Z</wml2:time> 
         <wml2:value>4.2</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
        </wml2:MeasurementTimeseries> 
       </om:result> 

     </omso:PointTimeSeriesObservation> 
    </wfs:member> 
     <wfs:member> 
       <omso:PointTimeSeriesObservation gml:id="WFS-6fPzOlwmFuqLQd1YDR_0qMRemw2JTowqYWbbpdOt.Lnl5dsPTTv3c3Trvlw9NGXk6ddNO3L2w7OuXhh08oWliy59O6pp25bX_0KFCMbHy51qRaFOO6dNGTVwzsu7JU07ctr_6FCiGdm26eenJzrMYsGLBg3Zmzfjw7MtambTfjSV3XpmcNbbh8RNPPph3Y8tK1dCA0tuHxF4b8ejnODHM3tuXpl30MPLDty9MvLnWt307snPhly5NvNrbdPPnp3Z6mXx0rGnYZza3dds_NT6Yemnfu5zhNbj1w7NPTzJ3Zt9Y2_Nma3Pph6ad.6p54Za0N_DLuyYemFuc.m_llyceuXl5v6claYWbbpdOt.Lnl5dsPTTv3c3Trvlw9NGXk6ddNO3L2w7OuXhh08mh007ctPpl4T8hNDpp25bW_dlrGq1IYA-"> 


     <om:phenomenonTime xlink:href="#time1-1-1"/> 
     <om:resultTime xlink:href="#time2-1-1"/>  

     <om:procedure xlink:href="http://xml.fmi.fi/inspire/process/opendata"/> 
        <om:parameter> 
       <om:NamedValue> 
        <om:name xlink:href="http://inspire.ec.europa.eu/codeList/ProcessParameterValue/value/groundObservation/observationIntent"/> 
        <om:value> 
      atmosphere 
        </om:value> 
       </om:NamedValue> 
      </om:parameter> 

       <om:observedProperty xlink:href="http://data.fmi.fi/fmi-apikey/41156987-d187-45e2-a2d3-6113c39b15ab/meta?observableProperty=observation&amp;param=windspeedms&amp;language=eng"/> 
       <om:featureOfInterest> 
        <sams:SF_SpatialSamplingFeature gml:id="fi-1-1-windspeedms"> 
      <sam:sampledFeature> 
     <target:LocationCollection gml:id="sampled-target-1-1-windspeedms"> 
      <target:member> 
      <target:Location gml:id="obsloc-fmisid-101007-pos-windspeedms"> 
       <gml:identifier codeSpace="http://xml.fmi.fi/namespace/stationcode/fmisid">101007</gml:identifier> 
      <gml:name codeSpace="http://xml.fmi.fi/namespace/locationcode/name">Helsinki Rautatientori</gml:name> 
      <gml:name codeSpace="http://xml.fmi.fi/namespace/locationcode/geoid">-16011680</gml:name> 
      <gml:name codeSpace="http://xml.fmi.fi/namespace/locationcode/wmo">2934</gml:name> 
      <target:representativePoint xlink:href="#point-101007"/>          


      <target:region codeSpace="http://xml.fmi.fi/namespace/location/region">Helsinki</target:region> 

      </target:Location></target:member> 
     </target:LocationCollection> 
     </sam:sampledFeature> 
         <sams:shape> 

       <gml:Point gml:id="point-1-1-windspeedms" srsName="http://www.opengis.net/def/crs/EPSG/0/4258" srsDimension="2"> 
           <gml:name>Helsinki Rautatientori</gml:name> 
           <gml:pos>60.17169 24.94460 </gml:pos> 
          </gml:Point> 

         </sams:shape> 
        </sams:SF_SpatialSamplingFeature> 
       </om:featureOfInterest> 
      <om:result> 
        <wml2:MeasurementTimeseries gml:id="obs-obs-1-1-windspeedms">       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T00:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T01:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T02:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T03:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T04:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T05:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T06:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T07:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T08:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T09:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T10:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T11:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T12:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T13:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T14:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T15:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T16:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T17:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T18:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T19:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T20:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T21:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T22:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-01T23:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
         <wml2:point> 
          <wml2:MeasurementTVP> 
             <wml2:time>2015-01-02T00:00:00Z</wml2:time> 
         <wml2:value>NaN</wml2:value> 
          </wml2:MeasurementTVP> 
         </wml2:point>       
        </wml2:MeasurementTimeseries> 
       </om:result> 

     </omso:PointTimeSeriesObservation> 
    </wfs:member> 
</wfs:FeatureCollection> 

Данные вложен в <wml2:MeasurementTimeseries gml:id="obs-obs-1-1-temperature"> for the temperature and within<wml2:MeasurementTimeseries gml:id="obs-obs-1-1-windspeedms"> для скорости ветра (Нан в этом файле).

Я хотел бы перебирать эти серии по отдельности и сохранять их в формате .txt в табличном формате. Я могу сохранить данные временных рядов, но я не могу их разделить на несколько столбцов, например. to time | temp | формат скорости ветра.

Мой текущий код работает, если файл XML имеет только одно измерение (темп или скорость ветра отдельно), потому что мне нужно только перебирать файл.

import xml.etree.cElementTree as ET 

tree = ET.ElementTree(file='XML_file.xml') 
def parser(item1,item2): 
    return item1.text,item2.text 

data = [parser(item1,item2) for item1,item2 in zip(tree.iter(tag='{http://www.opengis.net/waterml/2.0}time'),tree.iter(tag='{http://www.opengis.net/waterml/2.0}value'))] 



with open('data.txt', 'w') as fp: 
     fp.write('\n'.join('%s|%s' % x for x in data)) 

Поскольку измерения для температуры и WS имеют одинаковую длину, как я мог бы итерацию через них (другой тег может быть?) И возвращать кортеж для каждой временной точки, например. (time,temp value, winds speed value)

EDIT: Результаты этой печати. Но если я добавлю тег, как это i.iter(tag='{http://www.opengis.net/waterml/2.0}MeasurementTimeseries'), я получаю TypeError: iter() takes no keyword arguments.

for i in tree.iter(tag='{http://www.opengis.net/waterml/2.0}MeasurementTimeseries'): 
    for j in i.iter(): 
     print j.text 

Это напечатает:

2015-01-01T00:00:00Z 
4.6 




2015-01-01T01:00:00Z 
4.5 
+0

Я не уверен, я понимаю эту проблему, но это звучит, как все, что вам нужно сделать, это заархивировать данные времени и-ТЕМП с Time- и-windspeed, которые вы используете с 'zip', который вы уже используете, поэтому, вероятно, вы знаете, как использовать его снова. – abarnert

+0

Или вы спрашиваете, как написать вложенный поиск (или единственный запрос XPath), чтобы получить «время» и «значение» из каждой конкретной серии, вместо того, чтобы получать какие-либо теги 'time' и' value' в любом месте файла? – abarnert

+0

Да, у меня проблемы с разделом двух серий, в которых они используют один и тот же тег. Мой текущий код просто проходит через файл и сохраняет последние данные скорости ветра ниже температурных данных. Я хотел бы использовать (возможно, запрос XPath?), Который я мог бы использовать для «стека» столбца данных вместе с кортежами (time_i, temp_i, windspeed_i) для i = length (series). – ELEC

ответ

1

Я думаю что вы просите за это: Вместо того, чтобы найти все время и значение тегов в любом месте файла, вы хотите, чтобы найти время и только теги температуры. (И затем сделайте то же самое для тегов времени и значений только под тегом windspeed, а затем застегните их вместе, но вы могли бы сделать эту часть самостоятельно, если бы у вас была первая часть.)

Для этого вы нужен вложенный поиск.

Вы можете сделать это в явном виде, с двумя поисков-например, перебирать двух MeasurementTimeseries, затем, в течение каждого из них, перебрать его time и value потомков:

def parse_one_series(series): 
    return [parser(item1,item2) for item1,item2 in 
      zip(series.iter(tag='{http://www.opengis.net/waterml/2.0}time'), 
       series.iter(tag='{http://www.opengis.net/waterml/2.0}value'))] 

data = zip(*(parse_one_series(series) for series in 
      tree.iter(tag='{http://www.opengis.net/waterml/2.0}MeasurementTimeseries'))) 

И теперь, каждый элемент данных - пара пар, первая - время и темп, вторая - время и скорость ветра. Хотя вы можете организовать вещи немного более красиво:

data = [(time, temp, wind) for (time, temp), (_, wind) in data] 
+0

Вы читали мой разум :) Это именно то, чего я хотел. Хорошо знать, что вы можете разделить серию с помощью вложенного поиска. – ELEC

+0

Я попытался проверить ваш код, но я получил аргумент '' TypeError: zip() после * должен быть последовательностью, а не генератором''. Есть идеи? – ELEC

+0

@ELEC: Я тестировал это с помощью Python 2.7 и 3.4 и не получил эту ошибку ни с одной. (Я также попробовал 2.6, но у его более старой версии 'ElementTree' нет метода' iter'.) Итак ... Я не уверен, в чем проблема. Вы можете легко преобразовать генератор в список (который является некоторой последовательностью), просто используя понимание списка вместо выражения генератора (то есть 'zip (* [...])' вместо 'zip (* (...)) ', но я не уверен, зачем вам это нужно. – abarnert

Смежные вопросы