从基于url的txt文件中提取关键数据

时间:2016-11-03 13:27:43

标签: python

我试图在此链接weather report上创建一些分析文本文件的代码,然后找到文件中的行并读取摄氏温度值并返回它。 温度读数并不总是在同一条线上,但它在线上的格式始终相同。

在这里读完堆栈溢出后,我使用了re库和一个在线正则表达式计算器来获取一些代码。这就是我到目前为止所做的:

import urllib
import re

def noaa_string():
  url = "http://tgftp.nws.noaa.gov/data/observations/metar/decoded/EGHI.TXT"
  noaa_data_string = urllib.request.urlopen(url).read()
  return noaa_data_string.decode("utf-8")


def noaa_temperature(s):
  """takes a string s as returned from noaa_string() as the input argument,
  extracts the temperature in degree Celsius from the string, and returns
  this temperature as an integer number"""
  regex = r"\Temperature........(\d*)"
  matches = re.finditer(regex, noaa_string())

for matchNum, match in enumerate(matches):
    matchNum = matchNum + 1
    match = match.group()
    for groupNum in range(0, len(match.groups())):
        groupNum = groupNum + 1
        group = match.group(groupNum)
        print(group)

我收到此错误:

File "E:/Google Drive/python_files/untitled0.py", line 26, in <module>
for groupNum in range(0, len(match.groups())):

AttributeError: 'str' object has no attribute 'groups'

有没有人有任何关于如何解决此错误的建议/更简单的方法来做我想做的事情?我觉得我过度复杂了......

1 个答案:

答案 0 :(得分:-1)

正如你所说

  

...温度并不总是在同一条线上,但它在线上的格式总是相同。

因此,您不需要正则表达式的复杂性来解决此问题。

import urllib.request

def noaa_string():
    request = urllib.request.urlopen(url).read().split(b'\n')
    for row in request:
        if row.startswith(b'Temperature'):
            return row

def noaa_temperature(s):
    return s[s.find(b'(')+1: s.find(b')')]

修改

如果您想将值作为intfloat返回,只需使用相应的函数进行转换。

int(s[s.find(b'(')+1: s.find(b')')])