最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)葵花8號(hào)衛(wèi)星數(shù)據(jù)自動(dòng)下載實(shí)例

 更新時(shí)間:2022年10月13日 11:52:31   作者:Comtech  
這篇文章主要為大家介紹了Python實(shí)現(xiàn)葵花8號(hào)衛(wèi)星數(shù)據(jù)自動(dòng)下載實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一:數(shù)據(jù)源介紹

本篇文章介紹的是使用python實(shí)現(xiàn)對(duì)葵花8號(hào)衛(wèi)星數(shù)據(jù)進(jìn)行自動(dòng)下載。

葵花8號(hào)衛(wèi)星是日本的一顆靜止軌道氣象衛(wèi)星,覆蓋范圍為60S-60N, 80E-160W,除了提供十分鐘一幅的原始衛(wèi)星影像外,還提供了如氣溶膠光學(xué)厚度(AOT,也叫AOD)、葉綠素A、海表溫度、云層厚度以及火點(diǎn)等多種產(chǎn)品,這些數(shù)據(jù)都可以進(jìn)行下載。

二:FTP服務(wù)器描述

首先需要在葵花8官網(wǎng)申請(qǐng)帳號(hào)。

可以通過(guò)FTP(ftp.ptree.jaxa.jp)使用申請(qǐng)的帳號(hào)密碼訪問(wèn)文件服務(wù)器,可以看到j(luò)ma文件夾、pub文件夾和兩個(gè)文本文件,其中,jma文件夾和pub文件夾中存放的都是葵花系列衛(wèi)星的影像產(chǎn)品,文本文件的內(nèi)容是每種影像產(chǎn)品的存放位置和數(shù)據(jù)介紹。

三: 程序描述

  • 本代碼下載Ftp服務(wù)器如下地址下的文件,如需使用可根據(jù)自己的需要進(jìn)行修改,也可以參考官方txt數(shù)據(jù)介紹文檔尋找自己需要的數(shù)據(jù)的存儲(chǔ)路徑。
  • 使用/031目錄是因?yàn)閿?shù)據(jù)最全。
  /pub/himawari/L3/ARP/031/
  • 本程序有兩個(gè)全局調(diào)試變量。
全局變量TrueFalse配置變量
debugLocalDownload下載到本地目錄下載到服務(wù)器指定目錄self._save_path
debugDownloadDaily下載當(dāng)前日期前1天的文件下載指定時(shí)間段的文件-

本程序有兩個(gè)版本在debugDownloadDaily=False時(shí)略有區(qū)別

  • HimawariDownloadBulitIn的時(shí)間變量寫(xiě)在程序內(nèi)部,運(yùn)行前需手動(dòng)修改,適用于超算節(jié)點(diǎn)。
  • HimawariDownloadCmdLine的時(shí)間變量通過(guò)命令行輸入,適用于登陸節(jié)點(diǎn)。

四:注意事項(xiàng)

  • 代碼無(wú)法直接運(yùn)行 需要將以下行中的帳號(hào)和密碼替換成你申請(qǐng)的賬號(hào)密碼

五:代碼

# -*- codeing = utf-8 -*-
# 可以部署在日本的服務(wù)器上,下載速度很快
import ftplib
import json
import os
import time
import numpy as np
debugLocalDownload = True
debugDownloadDaily = False
globPersonalTime = [2022, 9, 7]
class NumpyEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, (np.int_, np.intc, np.intp, np.int8,
                            np.int16, np.int32, np.int64, np.uint8,
                            np.uint16, np.uint32, np.uint64)):
            return int(obj)
        elif isinstance(obj, (np.float_, np.float16, np.float32, np.float64)):
            return float(obj)
        elif isinstance(obj, (np.ndarray,)):
            return obj.tolist()
        return json.JSONEncoder.default(self, obj)
class himawari:
    ftp = ftplib.FTP()
    def __init__(self):
        self._url = '/pub/himawari/L3/ARP/031/'
        self._save_path = './Your_save_path'
        if debugLocalDownload:
            self._save_path = './Download/'
        self.ftp.connect('ftp.ptree.jaxa.jp', 21)
        self.ftp.login('YourFTPAccount', 'YourFTPPassWord')
        self._yearNum, self._monNum, self._dayNum = self.dayInit()
        self._nginx_path = ''
        print(self.ftp.welcome)  # 顯示登錄信息
    def run(self):
        self._nginx_path = ''
        try:
            if debugDownloadDaily:
                self._yearNum, self._monNum, self._dayNum = self.getYesterday(self._yearNum, self._monNum, self._dayNum)
            else:
                self._yearNum = globPersonalTime[0]
                self._monNum = globPersonalTime[1]
                self._dayNum = globPersonalTime[2]
            self._yearStr, self._monStr, self._dayStr = self.getDateStr(self._yearNum, self._monNum, self._dayNum)
            ftp_filePath = self._url + self._yearStr + self._monStr + "/" + self._dayStr + "/"
            # 從目標(biāo)路徑ftp_filePath將文件下載至本地路徑dst_filePath
            dst_filePath = self._nginx_path + self._save_path + self._yearStr + "/" + self._monStr + "/" + self._dayStr + "/" + "hour" + "/"
            self.deleteFile(dst_filePath)  # 先刪除未下載完成的臨時(shí)文件
            print("Local:" + dst_filePath)
            print("Remote:" + ftp_filePath)
            self.DownLoadFileTree(dst_filePath, ftp_filePath)
            if debugDownloadDaily:
                self.ftp.quit()
        except Exception as err:
            print(err)
    def getYesterday(self, yy, mm, dd):
        dt = (yy, mm, dd, 9, 0, 0, 0, 0, 0)
        dt = time.mktime(dt) - 86400
        yesterdayList = time.strftime("%Y-%m-%d", time.localtime(dt)).split('-')
        return int(yesterdayList[0]), int(yesterdayList[1]), int(yesterdayList[2])
    def dayInit(self, ):
        yesterdayList = time.strftime("%Y-%m-%d", time.localtime(time.time())).split('-')
        return int(yesterdayList[0]), int(yesterdayList[1]), int(yesterdayList[2])
    def getDateStr(self, yy, mm, dd):
        syy = str(yy)
        smm = str(mm)
        sdd = str(dd)
        if mm < 10:
            smm = '0' + smm
        if dd < 10:
            sdd = '0' + sdd
        return syy, smm, sdd
    # 刪除目錄下擴(kuò)展名為.temp的文件
    def deleteFile(self, fileDir):
        if os.path.isdir(fileDir):
            targetDir = fileDir
            for file in os.listdir(targetDir):
                targetFile = os.path.join(targetDir, file)
                if targetFile.endswith('.temp'):
                    os.remove(targetFile)
    # 下載單個(gè)文件,LocalFile表示本地存儲(chǔ)路徑和文件名,RemoteFile是FTP路徑和文件名
    def DownLoadFile(self, LocalFile, RemoteFile):
        bufSize = 102400
        file_handler = open(LocalFile, 'wb')
        print(file_handler)
        # 接收服務(wù)器上文件并寫(xiě)入本地文件
        self.ftp.retrbinary('RETR ' + RemoteFile, file_handler.write, bufSize)
        self.ftp.set_debuglevel(0)
        file_handler.close()
        return True
    # 下載整個(gè)目錄下的文件,LocalDir表示本地存儲(chǔ)路徑, emoteDir表示FTP路徑
    def DownLoadFileTree(self, LocalDir, RemoteDir):
        # 如果本地不存在該路徑,則創(chuàng)建
        if not os.path.exists(LocalDir):
            os.makedirs(LocalDir)
            # 獲取FTP路徑下的全部文件名,以列表存儲(chǔ)
        self.ftp.cwd(RemoteDir)
        RemoteNames = self.ftp.nlst()
        RemoteNames.reverse()
        # print("RemoteNames:", RemoteNames)
        for file in RemoteNames:
            # 先下載為臨時(shí)文件Local,下載完成后再改名為nc4格式的文件
            # 這是為了防止上一次下載中斷后,最后一個(gè)下載的文件未下載完整,而再開(kāi)始下載時(shí),程序會(huì)識(shí)別為已經(jīng)下載完成
            Local = os.path.join(LocalDir, file[0:-3] + ".temp")
            files = file[0:-3] + ".nc"
            LocalNew = os.path.join(LocalDir, files)
            '''
            下載小時(shí)文件,只下載UTC時(shí)間0時(shí)至24時(shí)(北京時(shí)間0時(shí)至24時(shí))的文件
            下載的文件必須是nc格式
            若已經(jīng)存在,則跳過(guò)下載
            '''
            # 小時(shí)數(shù)據(jù)命名格式示例:H08_20200819_0700_1HARP030_FLDK.02401_02401.nc
            if int(file[13:15]) >= 0 and int(file[13:15]) <= 24:
                if not os.path.exists(LocalNew):
                    #print("Downloading the file of %s" % file)
                    self.DownLoadFile(Local, file)
                    os.rename(Local, LocalNew)
                    print("The download of the file of %s has finished\n" % file)
                    #print("png of the file of %s has finished\n" % png_name)
                elif os.path.exists(LocalNew):
                    print("The file of %s has already existed!\n" % file)
        self.ftp.cwd("..")
        return
# 主程序
myftp = himawari()
if debugDownloadDaily:
    myftp.run()
else:
    yyStart, mmStart, ddStart = input("Start(yy mm dd):").split()
    yyStart, mmStart, ddStart = int(yyStart), int(mmStart), int(ddStart)
    yyEnd, mmEnd, ddEnd = input("End(yy mm dd):").split()
    yyEnd, mmEnd, ddEnd = int(yyEnd), int(mmEnd), int(ddEnd)
    dtStart = (yyStart, mmStart, ddStart, 9, 0, 0, 0, 0, 0)
    dtEnd = (yyEnd, mmEnd, ddEnd, 10, 0, 0, 0, 0, 0)
    timeIndex = time.mktime(dtStart)
    timeIndexEnd = time.mktime(dtEnd)
    while timeIndex < timeIndexEnd:
        indexDayList = time.strftime("%Y-%m-%d", time.localtime(timeIndex)).split('-')
        globPersonalTime[0] = int(indexDayList[0])
        globPersonalTime[1] = int(indexDayList[1])
        globPersonalTime[2] = int(indexDayList[2])
        print(globPersonalTime)
        myftp.run()
        timeIndex = int(timeIndex) + 3600 * 24

以上就是Python實(shí)現(xiàn)葵花8號(hào)衛(wèi)星數(shù)據(jù)自動(dòng)下載實(shí)例的詳細(xì)內(nèi)容,更多關(guān)于Python數(shù)據(jù)自動(dòng)下載的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python中裝飾器的理解與使用詳解

    python中裝飾器的理解與使用詳解

    這篇文章主要介紹了python中裝飾器的理解與使用詳解,裝飾器本質(zhì)上是一個(gè)閉包函數(shù),其作用在于可以為其他函數(shù)增加額外功能,裝飾器的返回值是一個(gè)函數(shù)對(duì)象,需要的朋友可以參考下
    2023-07-07
  • Python實(shí)現(xiàn)繪制置信區(qū)間

    Python實(shí)現(xiàn)繪制置信區(qū)間

    置信區(qū)間是從觀測(cè)數(shù)據(jù)的統(tǒng)計(jì)量計(jì)算的一種估計(jì)值,它給出了一個(gè)可能包含具有特定置信水平的總體參數(shù)的值范圍,下面我們就來(lái)看看如何使用Python繪制置信區(qū)間吧
    2024-02-02
  • python中四舍五入的正確打開(kāi)方式

    python中四舍五入的正確打開(kāi)方式

    這篇文章主要介紹了python中四舍五入的正確打開(kāi)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 18個(gè)Python入門(mén)經(jīng)典必背的程序分享

    18個(gè)Python入門(mén)經(jīng)典必背的程序分享

    這篇文章主要為大家介紹了Python入門(mén)經(jīng)典必背的18個(gè)程序。注意:這是初學(xué)者要牢記的 18 個(gè)代碼,入門(mén)之后就簡(jiǎn)單了,快跟隨小編一起來(lái)學(xué)習(xí)一下吧
    2023-02-02
  • TensorFlow命名空間和TensorBoard圖節(jié)點(diǎn)實(shí)例

    TensorFlow命名空間和TensorBoard圖節(jié)點(diǎn)實(shí)例

    今天小編就為大家分享一篇TensorFlow命名空間和TensorBoard圖節(jié)點(diǎn)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • python 無(wú)監(jiān)督生成模型的示例

    python 無(wú)監(jiān)督生成模型的示例

    無(wú)監(jiān)督生成模型在機(jī)器學(xué)習(xí)中扮演著重要角色,特別是當(dāng)我們?cè)跊](méi)有標(biāo)簽數(shù)據(jù)的情況下想要生成新的樣本或理解數(shù)據(jù)的內(nèi)在結(jié)構(gòu)時(shí),這篇文章主要介紹了python 無(wú)監(jiān)督生成模型的示例,需要的朋友可以參考下
    2024-07-07
  • Python類屬性與實(shí)例屬性用法分析

    Python類屬性與實(shí)例屬性用法分析

    這篇文章主要介紹了Python類屬性與實(shí)例屬性用法,實(shí)例分析了Python類屬性與實(shí)例屬性的功能、定義與使用技巧,需要的朋友可以參考下
    2015-05-05
  • Python Django教程之模板的使用

    Python Django教程之模板的使用

    模板是 Django MVT 結(jié)構(gòu)的第三個(gè)也是最重要的部分。Django中的模板基本上是用HTML,CSS和Javascript編寫(xiě)在.html文件中的。本文將通過(guò)實(shí)例詳細(xì)聊聊Django模板的使用,感興趣的可以
    2022-10-10
  • 編寫(xiě)多線程Python服務(wù)器 最適合基礎(chǔ)

    編寫(xiě)多線程Python服務(wù)器 最適合基礎(chǔ)

    很好的Python多線程基礎(chǔ)教程,能夠幫助初學(xué)者快速了解Python多線程簡(jiǎn)單實(shí)現(xiàn)。線程可以使任何程序運(yùn)行得更快。但是這也增加了代碼的復(fù)雜性。所以,如果你發(fā)現(xiàn)很難理解,那么添加更多的日志將有助于檢查里面發(fā)生了什么
    2018-09-09
  • 使用python讀取CSV文件時(shí)遇到編碼問(wèn)題解決方案

    使用python讀取CSV文件時(shí)遇到編碼問(wèn)題解決方案

    這篇文章主要介紹了用python讀取CSV文件時(shí)遇到編碼問(wèn)題,本文給大家分享最優(yōu)解決方案,通過(guò)使用csvkit,它使用自動(dòng)檢測(cè)適當(dāng)?shù)木幋a和解碼,需要的朋友可以參考下
    2023-08-08

最新評(píng)論

恩施市| 浦江县| 武鸣县| 平顶山市| 闻喜县| 十堰市| 高要市| 长宁区| 平度市| 宁阳县| 石屏县| 凤山县| 金平| 云阳县| 汉川市| 清远市| 太白县| 普格县| 商城县| 勃利县| 怀来县| 嘉祥县| 星座| 吉林省| 邢台市| 新巴尔虎左旗| 巴林右旗| 巴楚县| 宜章县| 双桥区| 思茅市| 大同市| 古丈县| 尼勒克县| 恩施市| 安丘市| 汽车| 永川市| 久治县| 沁阳市| 大港区|