对.txt文件Python的XML解析

对.txt文件Python的XML解析,python,xml,parsing,xml-parsing,Python,Xml,Parsing,Xml Parsing,我需要对此进行分析,并将日期和时间移动到%Y-%m-%d%H:%m:%S格式,以及变量每小时qpf和降水概率到以制表符分隔的.txt文件中的列中 我所能做的就是使用以下代码读取XML文件: page = urllib2.urlopen('http://forecast.weather.gov/MapClick.php?lat=47.6062&lon=-122.3321&FcstType=digitalDWML') page_content = page.read() with o

我需要对此进行分析,并将日期和时间移动到
%Y-%m-%d%H:%m:%S
格式,以及变量
每小时qpf
降水概率
到以制表符分隔的.txt文件中的列中

我所能做的就是使用以下代码读取XML文件:

page = urllib2.urlopen('http://forecast.weather.gov/MapClick.php?lat=47.6062&lon=-122.3321&FcstType=digitalDWML')
page_content = page.read()
with open('KBFI.xml', 'w') as fid:
    fid.write(page_content)
在这之后我不知所措。我以前只解析过一个XML文档,它看起来与此完全不同

编辑

很抱歉之前没有任何东西可以给你们,但我不确定该使用哪个模块,因为我只有minidom的经验,而且它似乎不是正确的选择。我一直在搞元素树,我想到了这个:

data = []
import xml.etree.ElementTree as ET
tree = ET.parse('KBFI.xml')
root = tree.getroot()
for data in root.findall('data'):
    for time-layout in root.findall('time-layout'):
        start-valid-time = time-layout.find('start-valid-time')
        time = datetime.datetime.strptime(start-valid-time, '%Y-%m-%dT%H:%M:%S')
    for parameters in root.findall('parameters'):
        for probability-of-precipitation in root.findall('probability-of-precipitation'):
            value = probability-of-precipitation.find('value')
    for hourly-qpf in root.findall('hourly-qpf'):
            value2 = hourly-qpf.find('value')
data = data.append([time,
                    value,
                    value2])
with open('KBFI.txt','w') as file:
    file.writelines('\t'.join(map(str,i)) + '\n' for i in data)

但是,有一个问题,因为变量是连字符的,我不知道如何将它们更改为下划线或删除它们。而且,正因为如此,我不知道我的代码是否好

您可以使用python xml库:


您可以使用python xml库:


您可以使用python xml库:


您可以使用python xml库:


我建议使用xmltodict来解析和提取XML中的数据,因为它简单易用,因为它使用与XML源相同的嵌套方式将XML转换为Python DICT。对于那些熟悉Python语法的人来说,使用它是很自然的,Python dict是完全通用的,这意味着它们能够表达异构和嵌套的数据结构。例如,依赖Python DITCS用于Python、C++和java数据互操作性,并提供将XML转换为DIX的工具。XMLtoDIT的优点在于它的小型、快速和独立的模块,只需将XML转换为DI.T/P> 作为xmltodict使用的示例,以下脚本下载并提取其创建日期以及降水概率和每小时qpf值列表:

import requests
url='http://forecast.weather.gov/MapClick.php?lat=47.6062&lon=-122.3321&FcstType=digitalDWML'
r = requests.get(url)

import xmltodict
result = xmltodict.parse(r.text)  
cd = result['dwml']['head']['product']['creation-date']['#text']
print("creation-date =",cd)
pop = result['dwml']['data']['parameters']['probability-of-precipitation']['value']
print("\nprobability-of-precipitation =", pop)
hqpf = result['dwml']['data']['parameters']['hourly-qpf']['value']
print("\nhourly-qpf =", hqpf)
以下是运行此脚本(在20150730上)的输出:

xmltodict可以与“pip安装xmltodict”一起安装。它由Martin Blech开发,其GitHub项目位于

为了访问开始有效时间和结束有效时间,它有助于了解它们的数据结构及其位置。由于两者都是包含在相同标签中的一系列值,直观地说,每个系列都应作为一个键的值形成一个单独的列表,其名称类似于降水概率和每小时qpf。这可以通过打印整个结果dict并检查其中的开始有效时间和结束有效时间的格式来确认,这可以通过漂亮地打印结果dict(使用import-pprint,然后运行pprint.pprint(result))来实现。例如,pretty printing其等效dict生成超过2000行,但起始有效时间从第26行开始,其值显然是一个列表:

{'dwml': {'@version': '1.0',
          '@xmlns:xsd': 'http://www.w3.org/2001/XMLSchema',
          '@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
          '@xsi:noNamespaceSchemaLocation': 'http://graphical.weather.gov/xml/DWMLgen/schema/DWML.xsd',
          'head': {'product': {'@concise-name': 'tabular-digital',
                               '@operational-mode': 'developmental',
                               '@srsName': 'WGS 1984',
                               'creation-date': {'@refresh-frequency': 'PT1H',
                                                 '#text': '2015-07-31T14:20:30-07:00'}},
                   'source': {'production-center': 'Seattle, WA',
                              'credit': 'http://www.wrh.noaa.gov/sew',
                              'more-information': 'http://www.nws.noaa.gov/forecasts/xml/'}},
          'data': {'location': {'location-key': 'point1',
                                'description': 'Downtown Seattle WA, WA',
                                'point': {'@latitude': '47.61',
                                          '@longitude': '-122.32'},
                                'city': {'@state': 'WA',
                                         '#text': 'Downtown Seattle WA'},
                                'height': {'@datum': 'mean sea level',
                                           '#text': '240'}},
                   'moreWeatherInformation': {'@applicable-location': 'point1',
                                              '#text': 'http://forecast.weather.gov/MapClick.php?lat=47.61&lon=-122.32&FcstType=digital'},
                   'time-layout': {'@time-coordinate': 'local',
                                   '@summarization': 'none',
                                   'layout-key': 'k-p1h-n1-0',
                                   'start-valid-time': ['2015-07-31T16:00:00-07:00',
                                                        '2015-07-31T17:00:00-07:00',
                                                        '2015-07-31T18:00:00-07:00',
...
以下是一个脚本,它提取并打印创建日期作为标量值、列表中的所有开始有效时间值、列表中的所有结束有效时间值、列表中的所有降水概率值和列表中的所有每小时qpf值,并打印每个提取列表的长度:

import xmltodict
result = xmltodict.parse(r.text)

cd = result['dwml']['head']['product']['creation-date']['#text']
print("creation-date =",cd)

svt = result['dwml']['data']['time-layout']['start-valid-time']
print("\nstart-valid-time =", svt)
print("number of start-valid-time entries =", len(svt))

evt = result['dwml']['data']['time-layout']['end-valid-time']
print("\nend-valid-time =", evt)
print("number of end-valid-time entries =", len(evt))

pop = result['dwml']['data']['parameters']['probability-of-precipitation']['value']
print("\nprobability-of-precipitation =", pop)
print("number of probability-of-precipitation entries =", len(pop))

hqpf = result['dwml']['data']['parameters']['hourly-qpf']['value']
print("\nhourly-qpf =", hqpf)
print("number of hourly-qpf entries =", len(hqpf))
以下是运行此脚本(在20150731上)的输出:


我建议使用xmltodict来解析和提取XML中的数据,因为它简单易用,因为它使用与XML源相同的嵌套方式将XML转换为Python DICT。对于那些熟悉Python语法的人来说,使用它是很自然的,Python dict是完全通用的,这意味着它们能够表达异构和嵌套的数据结构。例如,依赖Python DITCS用于Python、C++和java数据互操作性,并提供将XML转换为DIX的工具。XMLtoDIT的优点在于它的小型、快速和独立的模块,只需将XML转换为DI.T/P> 作为xmltodict使用的示例,以下脚本下载并提取其创建日期以及降水概率和每小时qpf值列表:

import requests
url='http://forecast.weather.gov/MapClick.php?lat=47.6062&lon=-122.3321&FcstType=digitalDWML'
r = requests.get(url)

import xmltodict
result = xmltodict.parse(r.text)  
cd = result['dwml']['head']['product']['creation-date']['#text']
print("creation-date =",cd)
pop = result['dwml']['data']['parameters']['probability-of-precipitation']['value']
print("\nprobability-of-precipitation =", pop)
hqpf = result['dwml']['data']['parameters']['hourly-qpf']['value']
print("\nhourly-qpf =", hqpf)
以下是运行此脚本(在20150730上)的输出:

xmltodict可以与“pip安装xmltodict”一起安装。它由Martin Blech开发,其GitHub项目位于

为了访问开始有效时间和结束有效时间,它有助于了解它们的数据结构及其位置。由于两者都是包含在相同标签中的一系列值,直观地说,每个系列都应作为一个键的值形成一个单独的列表,其名称类似于降水概率和每小时qpf。这可以通过打印整个结果dict并检查其中的开始有效时间和结束有效时间的格式来确认,这可以通过漂亮地打印结果dict(使用import-pprint,然后运行pprint.pprint(result))来实现。例如,pretty printing其等效dict生成超过2000行,但起始有效时间从第26行开始,其值显然是一个列表:

{'dwml': {'@version': '1.0',
          '@xmlns:xsd': 'http://www.w3.org/2001/XMLSchema',
          '@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
          '@xsi:noNamespaceSchemaLocation': 'http://graphical.weather.gov/xml/DWMLgen/schema/DWML.xsd',
          'head': {'product': {'@concise-name': 'tabular-digital',
                               '@operational-mode': 'developmental',
                               '@srsName': 'WGS 1984',
                               'creation-date': {'@refresh-frequency': 'PT1H',
                                                 '#text': '2015-07-31T14:20:30-07:00'}},
                   'source': {'production-center': 'Seattle, WA',
                              'credit': 'http://www.wrh.noaa.gov/sew',
                              'more-information': 'http://www.nws.noaa.gov/forecasts/xml/'}},
          'data': {'location': {'location-key': 'point1',
                                'description': 'Downtown Seattle WA, WA',
                                'point': {'@latitude': '47.61',
                                          '@longitude': '-122.32'},
                                'city': {'@state': 'WA',
                                         '#text': 'Downtown Seattle WA'},
                                'height': {'@datum': 'mean sea level',
                                           '#text': '240'}},
                   'moreWeatherInformation': {'@applicable-location': 'point1',
                                              '#text': 'http://forecast.weather.gov/MapClick.php?lat=47.61&lon=-122.32&FcstType=digital'},
                   'time-layout': {'@time-coordinate': 'local',
                                   '@summarization': 'none',
                                   'layout-key': 'k-p1h-n1-0',
                                   'start-valid-time': ['2015-07-31T16:00:00-07:00',
                                                        '2015-07-31T17:00:00-07:00',
                                                        '2015-07-31T18:00:00-07:00',
...
以下是一个脚本,它提取并打印创建日期作为标量值、列表中的所有开始有效时间值、列表中的所有结束有效时间值、列表中的所有降水概率值和列表中的所有每小时qpf值,并打印每个提取列表的长度:

import xmltodict
result = xmltodict.parse(r.text)

cd = result['dwml']['head']['product']['creation-date']['#text']
print("creation-date =",cd)

svt = result['dwml']['data']['time-layout']['start-valid-time']
print("\nstart-valid-time =", svt)
print("number of start-valid-time entries =", len(svt))

evt = result['dwml']['data']['time-layout']['end-valid-time']
print("\nend-valid-time =", evt)
print("number of end-valid-time entries =", len(evt))

pop = result['dwml']['data']['parameters']['probability-of-precipitation']['value']
print("\nprobability-of-precipitation =", pop)
print("number of probability-of-precipitation entries =", len(pop))

hqpf = result['dwml']['data']['parameters']['hourly-qpf']['value']
print("\nhourly-qpf =", hqpf)
print("number of hourly-qpf entries =", len(hqpf))
以下是运行此脚本(在20150731上)的输出:


我建议使用xmltodict来解析和提取XML中的数据,因为它简单易用,因为它使用与XML源相同的嵌套方式将XML转换为Python DICT。对于那些熟悉Python语法的人来说,使用它是很自然的,Python dict是完全通用的,这意味着它们能够表达异构和嵌套的数据结构。例如,依赖Python DITCS用于Python、C++和java数据互操作性,并提供将XML转换为DIX的工具。XMLtoDIT的优点在于它的小型、快速和独立的模块,只需将XML转换为DI.T/P> 作为xmltodict使用的一个示例,以下脚本下载并提取其创建内容