首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从xml文件中提取并存储(作为csv)属性标记

从xml文件中提取并存储(作为csv)属性标记
EN

Stack Overflow用户
提问于 2020-11-21 05:13:02
回答 1查看 109关注 0票数 1

我正在尝试创建一个.csv文件,其中包含给定时间点的车辆数量。

代码语言:javascript
复制
    <fcd-export xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/fcd_file.xsd">
    <timestep time="0.00">
        <vehicle id="veh0" x="668.78" y="2768.63" angle="265.68" type="veh_passenger" speed="0.00" pos="5.10" lane="253751722#0_1" slope="0.00"/>
    </timestep>
    <timestep time="1.00">
        <vehicle id="veh0" x="666.91" y="2768.48" angle="265.68" type="veh_passenger" speed="1.88" pos="6.98" lane="253751722#0_1" slope="0.00"/>
    </timestep>
    <timestep time="2.00">
        <vehicle id="veh0" x="663.10" y="2768.20" angle="265.68" type="veh_passenger" speed="3.82" pos="10.80" lane="253751722#0_1" slope="0.00"/>
    </timestep>
    <timestep time="3.00">
        <vehicle id="veh0" x="656.86" y="2767.72" angle="265.68" type="veh_passenger" speed="6.25" pos="17.05" lane="253751722#0_1" slope="0.00"/>
    </timestep>
    <timestep time="4.00">
        <vehicle id="veh0" x="648.85" y="2767.12" angle="265.68" type="veh_passenger" speed="8.04" pos="25.09" lane="253751722#0_1" slope="0.00"/>
    </timestep>
    <timestep time="5.00">
        <vehicle id="veh0" x="639.02" y="2766.38" angle="265.68" type="veh_passenger" speed="9.85" pos="34.93" lane="253751722#0_1" slope="0.00"/>
    </timestep>
<timestep time="14.00">
        <vehicle id="veh0" x="619.10" y="2768.08" angle="85.68" type="veh_passenger" speed="8.01" pos="20.23" lane="-253751722#0_1" slope="0.00"/>
        <vehicle id="veh1" x="988.73" y="2991.84" angle="226.12" type="veh_passenger" speed="3.87" pos="11.45" lane="-30968089#3_0" slope="0.00"/>
    </timestep>
    <timestep time="15.00">
        <vehicle id="veh0" x="628.97" y="2768.83" angle="85.68" type="veh_passenger" speed="9.90" pos="30.13" lane="-253751722#0_1" slope="0.00"/>
        <vehicle id="veh1" x="984.27" y="2987.44" angle="225.26" type="veh_passenger" speed="6.25" pos="17.70" lane="-30968089#3_0" slope="0.00"/>
    </timestep>
    <timestep time="16.00">
        <vehicle id="veh0" x="640.26" y="2769.68" angle="85.68" type="veh_passenger" speed="11.32" pos="41.45" lane="-253751722#0_1" slope="0.00"/>
        <vehicle id="veh1" x="978.85" y="2981.98" angle="224.80" type="veh_passenger" speed="7.69" pos="25.39" lane="-30968089#3_0" slope="0.00"/>
    </timestep>
    <timestep time="14.00">
        <vehicle id="veh0" x="619.10" y="2768.08" angle="85.68" type="veh_passenger" speed="8.01" pos="20.23" lane="-253751722#0_1" slope="0.00"/>
        <vehicle id="veh1" x="988.73" y="2991.84" angle="226.12" type="veh_passenger" speed="3.87" pos="11.45" lane="-30968089#3_0" slope="0.00"/>
    </timestep>
    <timestep time="15.00">
        <vehicle id="veh0" x="628.97" y="2768.83" angle="85.68" type="veh_passenger" speed="9.90" pos="30.13" lane="-253751722#0_1" slope="0.00"/>
        <vehicle id="veh1" x="984.27" y="2987.44" angle="225.26" type="veh_passenger" speed="6.25" pos="17.70" lane="-30968089#3_0" slope="0.00"/>
    </timestep>
    <timestep time="16.00">
        <vehicle id="veh0" x="640.26" y="2769.68" angle="85.68" type="veh_passenger" speed="11.32" pos="41.45" lane="-253751722#0_1" slope="0.00"/>
        <vehicle id="veh1" x="978.85" y="2981.98" angle="224.80" type="veh_passenger" speed="7.69" pos="25.39" lane="-30968089#3_0" slope="0.00"/>
    </timestep>

这就是我到目前为止所做的:

代码语言:javascript
复制
      import xml.etree.ElementTree as ET
      xml_tree = ET.parse("trace.xml")
      root = xml_tree.getroot()
      while i<150:
          print(root[i][1].get('id'))
          i=i+1

我尝试使用以下命令索引标签:root[x][0].get('id')这里x表示时间。但是当存在多个车辆标记时,它只返回python中相对较新的一个attributes.Im,任何帮助都将是appreciated.Thanks

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-21 20:05:21

对于这种类型的作业,最好使用带有lxml的xpath:

代码语言:javascript
复制
from lxml import etree
vehicles = """[your xml]"""
doc = etree.XML(vehicles.encode())
for ts in doc.xpath('//timestep'):
    print('time: ',ts.attrib['time'])
    for vehicle in ts.xpath('./vehicle/@id'):
        print('\tvehicle id:',vehicle)

输出:

代码语言:javascript
复制
.....
time:  4.00
    vehicle id: veh0
time:  5.00
    vehicle id: veh0
time:  14.00
    vehicle id: veh0
    vehicle id: veh1
time:  15.00
    vehicle id: veh0
    vehicle id: veh1
.....
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64936983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档