【发布时间】:2021-08-21 00:30:52
【问题描述】:
8/23 编辑:
感谢大家的回复以及可能比我的效率更高的代码。但是,我没有准确描述我想要捕捉的内容。
@DarkKnight 是正确的,我要查询的重要标记位于第 5 列。但是对于每个重要标记,我最多需要解析 15 行文本才能捕获完整的模型运行。以“TVCN”为例,我需要捕捉所有这些:
AL, 07, 2021082118, 03, TVCN, 0, 197N, 995W, 0
AL, 07, 2021082118, 03, TVCN, 12, 194N, 1026W, 0
AL, 07, 2021082118, 03, TVCN, 24, 191N, 1055W, 0
AL, 07, 2021082118, 03, TVCN, 36, 198N, 1084W, 0
AL, 07, 2021082118, 03, TVCN, 48, 202N, 1113W, 0
AL, 07, 2021082118, 03, TVCN, 60, 204N, 1139W, 0
AL, 07, 2021082118, 03, TVCN, 72, 208N, 1164W, 0
AL, 07, 2021082118, 03, TVCN, 84, 210N, 1188W, 0
AL, 07, 2021082118, 03, TVCN, 96, 211N, 1209W, 0
AL, 07, 2021082118, 03, TVCN, 108, 206N, 1230W, 0
AL, 07, 2021082118, 03, TVCN, 120, 201N, 1251W, 0
第 3 列是模型运行的日期/时间 (yyyymmddhh),而第 6 列是预测时间。因此,为了通过时间绘制预测但仅捕获最近的模型运行,我需要返回所有日期为“2021082118”的 TVCN 实例。当然,每次模型再次运行时,日期值都会更新。这有意义吗?
我有部分代码可以满足我的需求,但我一直在努力将它准确地送到我想要的地方。我正在从在线文本文件中提取逗号分隔的数据。然后我的代码会抛出我不想要的行。这些是飓风预报模型的原始数据。但是,在线文本文件存储了给定风暴的所有模型运行。我只想提取我选择的模型的最新运行。对于给定的模型运行(预测 t+12、t+24 等),每个模型都有多行文本。这可以实现吗?
这是我所拥有的部分工作:
import urllib.request
webf = urllib.request.urlopen("http://hurricanes.ral.ucar.edu/realtime/plots/northatlantic/2021/al072021/aal072021.dat")
lines = webf.readlines()
important_codes = ["AEM2", "AEMI", "AVNI", "CEM2", "COT2", "CTC1", "DSHP", "EGR2", "HMON", "HWFI", "NNIB", "LGEM", "NNIC", "OFCI", "OFCL", "SHIP", "TVCN", "UKX2"]
def is_important_line(line):
return any(code in line for code in important_codes)
output_lines = []
for line in lines:
decoded_line = line.decode("utf-8")
if not is_important_line(decoded_line):
continue
output_lines.append(decoded_line)
f = open('test.txt', 'w')
f.write("".join(output_lines))
f.close()
【问题讨论】:
标签: python python-3.x urllib