使用SatPy读取EUMETSAT SEVIRI L1.5原生文件遇报错求助
问题解决:SatPy读取SEVIRI L1.5原生文件报错
错误原因及修复方案
1. 嵌套列表导致的AttributeError: 'list' object has no attribute 'decode'
前两段代码均存在嵌套列表传参的问题:
glob()返回的本身就是列表对象,你写成filenames=[fnames]会把列表再嵌套一层(变成[[文件路径]])- 第二段代码中
filenames=[filenames]同样是嵌套列表,SatPy无法识别这种格式的路径,进而抛出解码错误。
修复后的第一段代码:
import glob from satpy import Scene fnames = glob('C:/Users/nk22017786/Desktop/satellite/MSG4-SEVI-MSG15-0100-NA-20190615165742.199000000Z-NA.nat') # 直接传入glob返回的列表,无需额外嵌套 scn = Scene(filenames=fnames, reader="seviri_l1b_native", reader_kwargs={'fill_disk': True}) scn.load(['VIS006'], upper_right_corner='NE') print(scn['VIS006'])
修复后的第二段代码:
from satpy import Scene # 直接传入文件路径列表,避免嵌套 filenames = ['C:/Users/nk22017786/Desktop/satellite/MSG4-SEVI-MSG15-0100-NA-20190313151244.440000000Z-NA.nat'] global_scene = Scene(reader='seviri_l1b_native', filenames=filenames) global_scene.load(['VIS006'])
2. 文件路径/名称错误导致的No filenames found for reader
第三段代码存在两个关键问题:
- 文件名缺少
.nat后缀,SatPy无法识别文件类型 - 未提供完整文件路径,Python当前工作目录大概率不是文件所在的
Desktop/satellite文件夹,导致找不到文件。
修复后的第三段代码:
from satpy import Scene # 传入完整路径+带.nat后缀的正确文件名 filenames = ['C:/Users/nk22017786/Desktop/satellite/MSG4-SEVI-MSG15-0100-NA-20190313151244.440000000Z-NA.nat'] scn = Scene(filenames=filenames, reader='seviri_l1b_native') scn.load(['VIS006', 'IR_108'], upper_right_corner='NE') print(scn['IR_108'])
额外注意事项
- 确保SatPy已安装SEVIRI相关依赖(如
pyresample、h5py),依赖缺失也可能导致读取失败 - 验证文件完整性:可使用EUMETSAT官方工具确认文件未损坏
内容的提问来源于stack exchange,提问作者KUZIPA NAMPEMBA
相关产品推荐
相关产品推荐

