我试图在此链接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'
有没有人有任何关于如何解决此错误的建议/更简单的方法来做我想做的事情?我觉得我过度复杂了......
答案 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')')]
修改强>
如果您想将值作为int
或float
返回,只需使用相应的函数进行转换。
int(s[s.find(b'(')+1: s.find(b')')])