python - 解析 xml 并编写带有标题列的 csv

标签 python xml csv qgis

我正在尝试解析包含气象数据的 xml 文件并在 csv 文件中写入一些值。 我不确定这段代码是否优雅,但它确实有效。

from qgis.PyQt.QtCore import *
import requests
import xml.etree.ElementTree as ET
# url of xml to parse
baseUrl = ('http://www.arpa.veneto.it/bollettini/meteo/h24/img08/0144.xml')
resp = requests.get(baseUrl)
msg = resp.content
tree = ET.fromstring(msg)
for stazione in tree.iter('STAZIONE'):
    idstaz= stazione.find('IDSTAZ').text
    for sensore in stazione.iter('SENSORE'):
      id= sensore.find('ID').text  
      for dati in sensore.iter('DATI'):
        ist = dati.get('ISTANTE') 
        vm = dati.find('VM').text
        f = open('D:/GIS/_Temp/result.csv', 'a')
        print >> f, idstaz, id, ist, vm
        f.close()

我不确定这段代码是否优雅,但它确实有效。

144 300000864 201701080100 -4.2
144 300000864 201701080200 -4.5
144 300000864 201701080300 -4.8
144 300000864 201701080400 -5.5
...

但我不知道如何将标题添加到列中。

最佳答案

在for循环之前打开文件并添加文件头

from qgis.PyQt.QtCore import *
import requests
import xml.etree.ElementTree as ET
# url of xml to parse
baseUrl = ('http://www.arpa.veneto.it/bollettini/meteo/h24/img08/0144.xml')
resp = requests.get(baseUrl)
msg = resp.content
tree = ET.fromstring(msg)
f = open('D:/GIS/_Temp/result.cvs', 'a')
f.write('STAZIONE,IDSTAZ,SENSORE,ISTANTE')
for stazione in tree.iter('STAZIONE'):
    idstaz= stazione.find('IDSTAZ').text
    for sensore in stazione.iter('SENSORE'):
      id= sensore.find('ID').text  
      for dati in sensore.iter('DATI'):
        ist = dati.get('ISTANTE') 
        vm = dati.find('VM').text

        print >> f, idstaz, id, ist, vm

f.close()

关于python - 解析 xml 并编写带有标题列的 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41573108/

相关文章:

安卓渐变背景

Android 抽屉导航 - 删除分隔每个项目的水平条

powershell - 根据映射文件将列映射到新列名称

java - 使用 @ManyToMany 反序列化并持久化

python - 导入错误 : No module named 'version'

python - 获取当前模块中所有函数的列表。检查当前模块不起作用?

java - 如何将 JSON 字段名称映射到不同的对象字段名称?

node.js - 管道流以在 node.js 中编辑 csv 文件

python - strftime 不返回缩写时区

python - 在字符串列表 (Python) 中查找特定模式(正则表达式)