下载L1的数据在lb_toolkits库的downloadH8.py中记录的很详细,大家可以通过先import lb_toolkits 再 print(lb_toolkits.__file__)查看库文件位置
把需要的库导入
from lb_toolkits.downloadcentre import downloadH8
但是该库只设计了下载L1的函数,需要在downloadH8文件补充一个函数。相比于search_ahi8_l1_netcdf就是简单修改一下目录位置。
def search_ahi8_l3_netcdf(self, starttime, endtime=None, pattern=None, skip=False):
'''
下载葵花8号卫星L3 PAR 辐照度 NetCDF数据文件 1h
Parameters
----------
starttime : datetime
下载所需数据的起始时间
endtime : datetime
下载所需数据的起始时间
pattern: list, optional
模糊匹配参数
Returns
-------
list
下载的文件列表
'''
if endtime is None :
endtime = starttime
downfilelist = []
nowdate = starttime
while nowdate <= endtime :
# 拼接H8 ftp 目录
sourceRoot = os.path.join('/pub/himawari/L3/PAR/021/', nowdate.strftime("%Y%m"), nowdate.strftime("%d"))
sourceRoot = sourceRoot.replace('\\','/')
# 获取文件列表
filelist = self.GetFileList2(starttime, endtime, sourceRoot, pattern)
if len(filelist) == 0 :
nowdate += datetime.timedelta(days=1)
print('未匹配当前时间【%s】的文件' %(nowdate.strftime('%Y-%m-%d')))
continue
nowdate += datetime.timedelta(days=1)
downfilelist.extend(filelist)
return downfilelist
如果你要下载L2的数据,是这样:
def search_ahi8_l2_netcdf(self, starttime, endtime=None, pattern=None, skip=False):
'''
下载葵花8号卫星L2 PAR 辐照度 NetCDF数据文件
Parameters
----------
starttime : datetime
下载所需数据的起始时间
endtime : datetime
下载所需数据的起始时间
pattern: list, optional
模糊匹配参数
Returns
-------
list
下载的文件列表
'''
if endtime is None :
endtime = starttime
downfilelist = []
nowdate = starttime
while nowdate <= endtime :
# 拼接H8 ftp 目录
sourceRoot = os.path.join('/pub/himawari/L2/PAR/021/', nowdate.strftime("%Y%m"), nowdate.strftime("%d"),nowdate.strftime("%H"))
sourceRoot = sourceRoot.replace('\\','/')
# 获取文件列表
filelist = self.GetFileList2(starttime, endtime, sourceRoot, pattern)
if len(filelist) == 0 :
nowdate += datetime.timedelta(days=1)
print('未匹配当前时间【%s】的文件' %(nowdate.strftime('%Y-%m-%d')))
continue
nowdate += datetime.timedelta(days=1)
downfilelist.extend(filelist)
return downfilelist
GetFileList也需要改变一下,归根结底都是ftp的目录和文件名字不一样,需要重新设定。
def GetFileList2(self, starttime, endtime, srcpath, pattern=None):
''' 根据输入时间,匹配获取H8 L2数据文件名 '''
downfiles = []
srcpath = srcpath.replace('\\', '/')
filelist = self.ftp.listdir(srcpath)
filelist.sort()
for filename in filelist :
namelist = filename.split('_')
nowdate = datetime.datetime.strptime('%s %s' %(namelist[1], namelist[2]), '%Y%m%d %H%M')
if (nowdate < starttime) | (nowdate > endtime) :
continue
downflag = True
# 根据传入的匹配参数,匹配文件名中是否包含相应的字符串
if pattern is not None :
if isinstance(pattern, list) :
for item in pattern :
if item in filename :
downflag = True
# break
else:
downflag = False
break
elif isinstance(pattern, str) :
if pattern in filename :
downflag = True
else:
downflag = False
if downflag :
srcname = os.path.join(srcpath, filename)
srcname = srcname.replace('\\','/')
downfiles.append(srcname)
return downfiles
修改完库文件了,添加一个主文件下载你需要的文件
def down_h8(start, end):
"""
:start 开始时间
:end 终止时间
"""
# 将输入的开始时间转换成datetime格式,后面的"%Y%m%d%H%M"格式化方式按照自己的需要进行修改
nowdate = datetime.datetime.strptime(start, "%Y%m%d%H%M")
# 将输入的终止时间转换为datetime格式
enddate = datetime.datetime.strptime(end, '%Y%m%d%H%M')
# 初始化下载类,将你的用户名和密码分别赋值给username和password两个参数
down = downloadH8(username='',password='')
# 下载自己需要的nc数据
# 获取下载列表
filelist = down.search_ahi8_l3_netcdf(nowdate, enddate)
# print(filelist)
# 新建一个列表用来保存需要下载的文件链接
down_list = []
# 循环获取到的文件列表按照自己需要进行筛选
for file in filelist:
# 按照需要进行匹配(这里是需要下载5KM分辨率02401的每10min数据)name_list[6][2]代表分辨率
name_list = file.split("_")
if (name_list[6][2] == '4') and name_list[0][-3:] == 'H09':
# 从文件URL中提取文件名
file_name = os.path.basename(file)
# 构建目标文件路径
target_path = os.path.join('/data/shiying/himawari/L3', file_name)
# 检查文件是否已存在
if not os.path.exists(target_path):
down_list.append(file)
# 进行数据下载
down.download('/data/shiying/himawari/L3', down_list)
# down_h8('202402280000', '202412312355') # 调用函数就可以下载
down_h8('202501150000', '202501292355') # 调用函数就可以下载
4979

被折叠的 条评论
为什么被折叠?



