如何对TDSCatalog数据集列表排序以适配循环及动画生成需求
解决方案
你遇到的报错是因为Siphon返回的TDS Dataset 对象本身没有定义大小比较规则,无法直接调用默认的sort()方法排序。可以通过指定排序键的方式解决,以下是两种可行方案:
方案1:基于文件名直接排序
NEXRAD Level3的文件名自带按规则编排的时间戳,文件名的字典序和时间序完全一致,直接用文件名作为排序键即可:
datasets = list(catalog.datasets.values()) # 按文件名升序排列,得到时间从早到晚的数据集列表 datasets_sorted = sorted(datasets, key=lambda ds: ds.name)
方案2:解析时间戳排序(更严谨)
如果需要规避文件名格式变动带来的风险,可以把文件名中的时间字段解析为datetime对象再排序:
from datetime import datetime def extract_time(ds): # 拆分 Level3_TWX_N0Q_20211110_2233.nids 格式的文件名,提取时间部分 name_segments = ds.name.split('_') date_part = name_segments[3] time_part = name_segments[4].removesuffix('.nids') return datetime.strptime(f"{date_part}{time_part}", "%Y%m%d%H%M") datasets = list(catalog.datasets.values()) datasets_sorted = sorted(datasets, key=extract_time)
排好序的datasets_sorted列表就可以直接适配matplotlib.animation.FuncAnimation的调用需求,按顺序迭代读取数据生成动画即可。
内容的提问来源于stack exchange,提问作者Bill Capehart
相关产品推荐
相关产品推荐

