今天开完组会,小小放松一下哈哈,更新一下许久没更新的CSDN(登陆太少,好多私信和评论都没回复,尴尬哈哈)


我之前下载JRA-55的monthly数据,上ftp用手点!用手点!!![破音] 太惨了,简直惨绝人寰。

最近要用到daily数据,手点是不可能的,这辈子都不可能的。我搜了一下,好像没看到介绍用服务器批量下载JRA-55的资料(之前有类似的帖子,但都是转载官网的,说什么编shell脚本,连接ftp,我水平有限,没做出来...),因此决定开个坑介绍一下如何用python脚本(内附脚本)对JRA-55数据进行批量下载。


开始前注意点:(急的不行,要赶紧下载的话,直接看脚本吧hhh)

1. 关于你自己:

(1)有JRA-55的账户密码

(2)安装好python(我用的python3.7) 其中ftplib这个包应该是自带的,如果没有的话,安装一下哈。

(3)可以在自己电脑上下,但是建议挂在服务器上下载(可能八成大概会快一点儿吧)

2. 关于JRA-55:

(1)JRA-55下载一次连接不能超过1个小时(所以后面,我通过断开连接、并分三次下载来规避这个问题)

(2)JRA-55账户一个24小时里总连接时长不能超过12小时(不是很严格,但是太长时间,JRA会把和你的连接断开; 为了规避这个问题,我找朋友借了一个账户,两个账户轮流下载)

(3)JRA-55下载巨慢!我用服务器下载,一个2.2M的文件要大概40秒~1分半。(所以我设置了下载大概40个文件断开一次)

3. 关于本程序:

(1)本人python刚入门的水平...(也可能还没入门,所以可能繁琐一些,不过是能用的哈哈)主要学习地点:(对本程序有什么不懂直接去看这个链接吧,我是基于他的工作基础上做的)

https://www.cnblogs.com/GouQ/p/11874194.html

(2)程序目的:总思路是下载1960~2018年6~8月所有位势高度(hgt)日数据。

(3)程序流程:1°设置好用户名、密码→ 2°设置JRA-55要下载的文件位置→ 3°连接FTP → 4° 逐个下载文件(一个月是120/124个文件),分三次下载,每次下载40个左右,以规避1个小时的链接限制。


程序:(含下载单个文件和批量下载)

# 学习地址:https://www.cnblogs.com/GouQ/p/11874194.html
# 使用python批量下载JRA55daily数据
# 2020.9.9  hhx
from ftplib import FTP
import os
def ftpDownloadFile(ftp, ftpfile, localfile):
    bufsize = 1024
    path    = os.path.join(localfile,ftpfile[-23:])
    with open(path, 'wb') as fid:
        print('downloading:',ftpfile)
        ftp.retrbinary('RETR {0}'.format(ftpfile), fid.write, bufsize)  # 接收服务器文件并写入本地文件
        print('downloading successful!!!')
    return True

ftpserver = 'ds.data.jma.go.jp'
userID    = 'honghx'                    #这里填JRA55的账户,我随便给的示例,应该是 'jraxxxxx'
Password  = 'dianzan'               #这里填JRA55密码,我随便给的示例,我猜密码是你的名字+生日 哈哈哈哈
print(userID)
localfile = '/home/honghx/data/JRA55_Daily_hgt/'      #这里要注意了!你要下载到你自己的文件夹下!这是我服务器的位置

year      = range(1960,2018,1)         #我下载1960~2018年的数据
month     = range(6,9,1)                   #我下载6~8月的数据,不要怀疑,就是(6,9,1)

# --下载单个数据(有时候因为种种原因要下单独的一个数据,就把批量的部分注释掉,用这段)
# file_name = '/JRA-55/Hist/Daily/anl_p125/200306/anl_p125_hgt.2003061700'
# ftp       = FTP()
# ftp.connect(ftpserver , 21      )
# ftp.login  (userID    , Password)
# flag      = ftpDownloadFile(ftp,file_name,localfile)

# --批量下载数据
for year_ind in year:
    for month_ind in month:
        ftpath    = '/JRA-55/Hist/Daily/anl_p125/'+str(year_ind)+str(month_ind).zfill(2)+'/'  #确定下载的地方,建议用ftp看看在哪里,再写进来
        result = []                 #result是所有要下载的文件名的集合
        ftp=FTP()
        ftp.connect(ftpserver , 21      )
        ftp.login  (userID    , Password)      # 用户登陆
        print('\n------- ftp connection successful!!! --------')
        for item in ftp.nlst(ftpath):
            if 'anl_p125_hgt.'+str(year_ind)+str(month_ind).zfill(2) in item:
                result.append(item)
        print('result length: '+str(len(result)))

#这个月要下的所有数据名都有了,我们准备下载了,我print了这个月的文件个数,看看对不对

for i in range(int(len(result)/3)):    #为什么要分成3块下载,在前文的注意点2 /(1) 给出理由了
            file_name = result[i]
            flag      = ftpDownloadFile(ftp,file_name,localfile)
            print(""+file_name[-23:]+": "+str(flag))
            del(file_name)
        ftp.quit()
        print('\n------- ftp disconnected!!! --------')
        del(ftp)

ftp=FTP()
        ftp.connect(ftpserver , 21      )
        ftp.login  (userID    , Password)      # 用户登陆
        print('\n------- ftp connection successful!!! --------')
        for i in range(int(len(result)/3),int(len(result)/3*2),1):
            file_name = result[i]
            flag      = ftpDownloadFile(ftp,file_name,localfile)
            print(""+file_name[-23:]+": "+str(flag))
            del(file_name)
        ftp.quit()
        print('\n------- ftp disconnected!!! --------')
        del(ftp)

ftp=FTP()
        ftp.connect(ftpserver , 21      )
        ftp.login  (userID    , Password)      # 用户登陆
        print('\n------- ftp connection successful!!! --------')
        for i in range(int(len(result)/3*2),len(result),1):
            file_name = result[i]
            flag      = ftpDownloadFile(ftp,file_name,localfile)
            print(""+file_name[-23:]+": "+str(flag))
            del(file_name)
        ftp.quit()
        print('\n------- ftp disconnected!!! --------')
        del(ftp)
        del(ftpath)
        del(result)


下载好啦!

写在最后:JRA-55的日数据下载实在缓慢,同比ERA5虽然暂时只能从1979年下载起,不过以后会提供1950年开始的,因此我推荐大家以后用ERA5吧。ERA5下载更快(大概500K左右,有时候快一些),分辨率更高(0.25°),当然了还是得看再分析资料在你所在区域的表现能力哈!

用python脚本实现JRA-55数据批量下载相关推荐

  1. python调用IE浏览器进行数据批量下载小技巧

    一.为什么要使用浏览器下载? 使用场景:已经有了大量的数据下载链接信息,这些保存在txt文本中,每一行是一个完整的下载链接地址,很多人首先就会想到,直接使用迅雷批量下载就好了,确实如此,这也是最简单的 ...

  2. Python从数据库读取大量数据批量写入文件的方法

    今天小编就为大家分享一篇Python从数据库读取大量数据批量写入文件的方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 使用机器学习训练数据时,如果数据量较大可能我们不能够一次性将 ...

  3. ECMWF等大气数据批量下载(Python API)详细步骤

    ECMWF等大气数据批量下载(Python API) 遥感方向做热红外温度反演,不可避免的要用到大气廓线数据,大气数据具有实时性,比如2018年9月1日的早上8点的影像,为了提高反演精度就需要用到时间 ...

  4. Sentinel-2 (哨兵2号) 数据批量下载教程 [python]

    Sentinel-2 [哨兵2号] 数据批量下载教程 [python] 1. 选择数据 2. 数据下载 2.1 下载链接文件 2.2 安装Python及data_downloader包 2.3 创建. ...

  5. arcgis python脚本实现从界面选择输入输出_ArcGIS Python脚本实现数据驱动页面的批量出图...

    这里讲一下如何通过Python脚本实现数据驱动页面的批量出图. 1 前提条件 首先要知道的是数据驱动页面的导出必须启用驱动页面,同时地图文档必须处于布局视图中. 2 具体实现 准备好批量出图的Pyth ...

  6. python脚本之将mysql数据转发给第三方udp网络端口

    python脚本之将mysql数据转发给第三方udp网络端口 前言 代码实现 原文地址:https://program-park.github.io/2021/03/12/python_2/ 前言 最 ...

  7. 天文数据批量下载笔记

    数据批量下载笔记 一.astroquery 很多大型巡天项目都提供了下载数据的API方法,因此利用python脚本批量下载数据成为可能.基于已有的API(或者SQL)方法,astroquery整合了多 ...

  8. GPM数据批量下载教程

    GPM数据批量下载教程 1. GPM数据产品简介 2 查找数据 3. 下载 3.1. 授权 3.1.1 通过 `.netrc` 文件授权 3.1.2 *通过浏览器授权(通过 `.netrc` 文件授权 ...

  9. MODIS冰雪数据批量下载

    MODIS冰雪数据批量下载之Python Script 相信有很多的朋友在研究极地(南北两极)的冰雪吧,下数据可能对于某些大小同行来说是一个头疼的问题,本文在这里就介绍一种批量爬取数据的方法. 数据下 ...

  10. 1、EC气象数据批量下载

    EC气象数据批量下载 前言 一.前期准备 1. 配置Python环境 2. 安装依赖库: 3. 注册EC账户并获得Key 3.1 注册账户 3.2 获取API信息 4. 选择数据 二.编写脚本开始下载 ...

最新文章

  1. matlab绘制图形hold on_matlab 中 hold on 和hold off的使用
  2. Maven中dependencies与dependencyManagement的区别
  3. ExtJS MVC学习手记 1
  4. TF-IDF的java实现(权重排序,可用来处理大数据集)
  5. H.264视频编码在VC .Net中的实现(H264全文)
  6. java解析apache日志_使用Apache Log4j 2解析日志条目
  7. oracle从删库到跑路,Mysql入门二十小题(DBA老司机带你删库到跑路)2018.11.26
  8. JetBrains GoLand 2018.3.5
  9. 基金盘后业务的详细设置
  10. wamp3.1.0下载地址
  11. 成都电子地图 高清15、17、19级别 谷歌电子地图资源
  12. beoplay耳机序列号查询_怎么鉴别 BO E8耳机真伪?【转】
  13. 计算机网络电缆是什么,很多人不知道,计算机电缆和光缆有什么区别
  14. 2048的C语言实现
  15. 江涛带你玩STM-CubeMx之OLED使用3线SPI和4线SPI驱动详解
  16. 利用RedisTemplate报错redis Invalid UTF-32 character 0x6a607661 (above 0x0010ffff) at char #8, byte #35)
  17. 面试常见问题回答技巧(70题)
  18. 杰理之蓝牙认证【篇】
  19. GMF 所依赖的插件
  20. Java学习 输出1-1000以内的质数

热门文章

  1. 宝剑锋从磨砺出,梅花开自苦寒来。今天那些在考研场上奋战的都是样的!
  2. Android通过.nomedia文件禁止多媒体库扫描指定文件夹下的多媒体文件
  3. docker安装nextcloud出现“ 内部服务器错误”
  4. 取消WPS对pdf文件的强制文件默认关联
  5. 刀具进口报关时需要提供的资料
  6. Error in `levels<-`(`*tmp*`, value = as.character(levels)) : factor level [2] is duplicated
  7. 计算机禁止usb,组策略禁止USB最好的方法
  8. 计算机基础应用知识ppt,计算机应用基础【计算机基础知识】课件.ppt
  9. NIO整体分析类图版
  10. opencv多对象追踪MultiTracker_create的代码(来自pyimagesearch)