用python脚本实现JRA-55数据批量下载
今天开完组会,小小放松一下哈哈,更新一下许久没更新的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数据批量下载相关推荐
- python调用IE浏览器进行数据批量下载小技巧
一.为什么要使用浏览器下载? 使用场景:已经有了大量的数据下载链接信息,这些保存在txt文本中,每一行是一个完整的下载链接地址,很多人首先就会想到,直接使用迅雷批量下载就好了,确实如此,这也是最简单的 ...
- Python从数据库读取大量数据批量写入文件的方法
今天小编就为大家分享一篇Python从数据库读取大量数据批量写入文件的方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 使用机器学习训练数据时,如果数据量较大可能我们不能够一次性将 ...
- ECMWF等大气数据批量下载(Python API)详细步骤
ECMWF等大气数据批量下载(Python API) 遥感方向做热红外温度反演,不可避免的要用到大气廓线数据,大气数据具有实时性,比如2018年9月1日的早上8点的影像,为了提高反演精度就需要用到时间 ...
- Sentinel-2 (哨兵2号) 数据批量下载教程 [python]
Sentinel-2 [哨兵2号] 数据批量下载教程 [python] 1. 选择数据 2. 数据下载 2.1 下载链接文件 2.2 安装Python及data_downloader包 2.3 创建. ...
- arcgis python脚本实现从界面选择输入输出_ArcGIS Python脚本实现数据驱动页面的批量出图...
这里讲一下如何通过Python脚本实现数据驱动页面的批量出图. 1 前提条件 首先要知道的是数据驱动页面的导出必须启用驱动页面,同时地图文档必须处于布局视图中. 2 具体实现 准备好批量出图的Pyth ...
- python脚本之将mysql数据转发给第三方udp网络端口
python脚本之将mysql数据转发给第三方udp网络端口 前言 代码实现 原文地址:https://program-park.github.io/2021/03/12/python_2/ 前言 最 ...
- 天文数据批量下载笔记
数据批量下载笔记 一.astroquery 很多大型巡天项目都提供了下载数据的API方法,因此利用python脚本批量下载数据成为可能.基于已有的API(或者SQL)方法,astroquery整合了多 ...
- GPM数据批量下载教程
GPM数据批量下载教程 1. GPM数据产品简介 2 查找数据 3. 下载 3.1. 授权 3.1.1 通过 `.netrc` 文件授权 3.1.2 *通过浏览器授权(通过 `.netrc` 文件授权 ...
- MODIS冰雪数据批量下载
MODIS冰雪数据批量下载之Python Script 相信有很多的朋友在研究极地(南北两极)的冰雪吧,下数据可能对于某些大小同行来说是一个头疼的问题,本文在这里就介绍一种批量爬取数据的方法. 数据下 ...
- 1、EC气象数据批量下载
EC气象数据批量下载 前言 一.前期准备 1. 配置Python环境 2. 安装依赖库: 3. 注册EC账户并获得Key 3.1 注册账户 3.2 获取API信息 4. 选择数据 二.编写脚本开始下载 ...
最新文章
- matlab绘制图形hold on_matlab 中 hold on 和hold off的使用
- Maven中dependencies与dependencyManagement的区别
- ExtJS MVC学习手记 1
- TF-IDF的java实现(权重排序,可用来处理大数据集)
- H.264视频编码在VC .Net中的实现(H264全文)
- java解析apache日志_使用Apache Log4j 2解析日志条目
- oracle从删库到跑路,Mysql入门二十小题(DBA老司机带你删库到跑路)2018.11.26
- JetBrains GoLand 2018.3.5
- 基金盘后业务的详细设置
- wamp3.1.0下载地址
- 成都电子地图 高清15、17、19级别 谷歌电子地图资源
- beoplay耳机序列号查询_怎么鉴别 BO E8耳机真伪?【转】
- 计算机网络电缆是什么,很多人不知道,计算机电缆和光缆有什么区别
- 2048的C语言实现
- 江涛带你玩STM-CubeMx之OLED使用3线SPI和4线SPI驱动详解
- 利用RedisTemplate报错redis Invalid UTF-32 character 0x6a607661 (above 0x0010ffff) at char #8, byte #35)
- 面试常见问题回答技巧(70题)
- 杰理之蓝牙认证【篇】
- GMF 所依赖的插件
- Java学习 输出1-1000以内的质数
热门文章
- 宝剑锋从磨砺出,梅花开自苦寒来。今天那些在考研场上奋战的都是样的!
- Android通过.nomedia文件禁止多媒体库扫描指定文件夹下的多媒体文件
- docker安装nextcloud出现“ 内部服务器错误”
- 取消WPS对pdf文件的强制文件默认关联
- 刀具进口报关时需要提供的资料
- Error in `levels<-`(`*tmp*`, value = as.character(levels)) : factor level [2] is duplicated
- 计算机禁止usb,组策略禁止USB最好的方法
- 计算机基础应用知识ppt,计算机应用基础【计算机基础知识】课件.ppt
- NIO整体分析类图版
- opencv多对象追踪MultiTracker_create的代码(来自pyimagesearch)