python脚本下载Himawari L2/L3数据

部署运行你感兴趣的模型镜像

下载L1的数据在lb_toolkits库的downloadH8.py中记录的很详细,大家可以通过先import lb_toolkitsprint(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') # 调用函数就可以下载

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值