修改sunpy教程参数报错是否为bug?GOES XRS长时序数据下载问题
问题原因
你遇到的报错是ts.TimeSeries返回了列表而非单个TimeSeries对象导致的:
在sunpy 3.0.1版本中,ts.TimeSeries(..., concat=True)的自动合并逻辑存在局限性,当待处理的文件数量多、时间跨度大时,如果文件之间存在时间不连续、元数据微小差异,自动合并不成功就会直接返回由多个TimeSeries对象组成的列表,自然不存在to_table方法。
这不属于平台特异性bug,是旧版本sunpy的已知逻辑缺陷,高版本sunpy已经优化了合并逻辑,出现该问题的概率会低很多。
修复方案
方案1:手动合并返回的TimeSeries列表
只需要在原有代码基础上增加手动合并的逻辑即可,修改后代码如下:
import datetime from sunpy import timeseries as ts from sunpy.timeseries import concatenate from sunpy.net import Fido from sunpy.net import attrs as a tstart = datetime.datetime(2016, 11, 19, 23, 59, 59) tend = datetime.datetime(2020, 6, 21, 23) result = Fido.search(a.Time(tstart, tend), a.Instrument("XRS"), a.goes.SatelliteNumber(16)) goes_16_files = Fido.fetch(result) goes_16 = ts.TimeSeries(goes_16_files, concat=True) # 新增判断:如果返回的是列表就手动合并 if isinstance(goes_16, list): goes_16 = concatenate(goes_16) goes_table = goes_16.to_table() goes_table.write('goes_16_re.csv', format='csv')
方案2:分块下载减少单次处理压力
一次性下载数年的GOES数据,文件量过大会增加下载失败、合并不成功的概率,建议按月份/季度拆分时间范围,逐个下载合并后追加到CSV文件中,避免中途出错需要重头处理。
额外建议
如果环境允许,建议升级sunpy到最新稳定版,新版本对GOES数据的读取、合并逻辑做了大量优化,能避免很多旧版本的兼容性问题。
内容的提问来源于stack exchange,提问作者mikeysflix
相关产品推荐
相关产品推荐

