You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对时间位置不同的FM/BECMG开头气象数据行按时间顺序排序?

气象数据排序解决方案

实现思路

两种格式的气象行时间特征明确,使用正则提取统一格式的时间戳作为排序键即可,无需按字段索引判断:

  • 以FM开头的行:时间为紧随FM后的6位字符串,格式为ddHHmm(日期、小时、分钟)
  • 以BECMG开头的行:取第二个字段中/前的4位字符串ddHH,补分钟位00后得到6位同格式时间戳

代码实现

import re

# 匹配时间的正则规则
time_pattern = re.compile(r'(?:FM(\d{6})|BECMG\s+(\d{4})/\d{4})')

def get_sort_key(line: str) -> str:
    match = time_pattern.search(line)
    if not match:
        return '' # 无匹配的行默认排序规则可自行调整
    fm_time, becmg_time = match.groups()
    # 统一返回6位ddHHmm格式字符串,天然支持字典序排序
    return fm_time if fm_time else f"{becmg_time}00"

total_print = ['\nBECMG 1315/1317 27007KT 9999 SHOWERS OF LIGHT RAIN SCT020 BKN030', '\nFM131200 20010KT 9999 SHOWERS OF LIGHT RAIN SCT006 BKN010',
               '\nFM131400 20010KT 9999 SHOWERS OF LIGHT RAIN SCT006 BKN010']

# 直接按提取的时间键排序
sorted_lines = sorted(total_print, key=get_sort_key)

# 按原有逻辑处理输出
final = []
for line in sorted_lines:
    final.append('\n' + line[1:])
print(' '.join(final))

运行输出

FM131200 20010KT 9999 SHOWERS OF LIGHT RAIN SCT006 BKN010 
FM131400 20010KT 9999 SHOWERS OF LIGHT RAIN SCT006 BKN010 
BECMG 1315/1317 27007KT 9999 SHOWERS OF LIGHT RAIN SCT020 BKN030

完全符合时间正序的排序要求,支持全FM、全BECMG、混合三种场景。

内容的提问来源于stack exchange,提问作者PW1990

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:24:04