如何下载NCDC气象数据


Hadoop 权威指南中需要下载NCDC气象数据,下载地址为:  ftp://ftp3.ncdc.noaa.gov/pub/data/noaa/ isd-lite/

但是,我们打开后所有的文件都是.gz格式,而且很多,我们不可能一个一个的去保存下载,

以下为使用python编写的批量下载数据文件的代码

#!/usr/bin/python
#-*- coding: utf-8 -*-

import sys
import os
from ftplib import FTP

#ftp 服务器链接
def ftpconnect():
    ftp_server = 'ftp3.ncdc.noaa.gov'
    username = ''
    password = ''
    ftp=FTP()
    ftp.set_debuglevel(2) #打开调试级别2,显示详细信息
    ftp.connect(ftp_server,21) #连接
    ftp.login(username,password) #登录,如果匿名登录则用空串代替即可
    return ftp

#开始下载文件
def downloadfile():  
    ftp = ftpconnect()    
    #print ftp.getwelcome() #显示ftp服务器欢迎信息
    datapath = "/pub/data/noaa/isd-lite/"
    year=int(sys.argv[1])		#年份循环
    currentyear = year			#当前执行年份
    while year<=int(sys.argv[2]):
        path=datapath+str(year)
        li = ftp.nlst(path)
        
        #创建指定年份的目录
        path = sys.argv[3]+'/'
        dir = str(year)
        new_path = os.path.join(path, dir)
        if not os.path.isdir(new_path):
            os.makedirs(new_path)
            
        for eachFile in li:
            localpaths = eachFile.split("/")
            localpath = localpaths[len(localpaths)-1]
            localpath=new_path + '/'+ str(year) + '--'+localpath#把日期放在最前面,方便排序
            bufsize = 1024 #设置缓冲块大小      
            fp = open(localpath,'wb') #以写模式在本地打开文件
            ftp.retrbinary('RETR ' + eachFile,fp.write,bufsize) #接收服务器上文件并写入本地文件
        year=year+1
    ftp.set_debuglevel(0) #关闭调试
    fp.close()
    ftp.quit() #退出ftp服务器


if __name__=="__main__":
    downloadfile()

将上述代码保存到为.py文件

cmd下运行 py文件,上述代码接收输入参数


运行命令为:

python.exe ncdc_download.py 1901 2014 weatherdata

python.exe                   //python 安装后文件

ncdc_download.py       //上述代码文件

1901   //起始下载年份

2014  //截止下载年份

weatherdata                  //指定的下载目录(要手动自己创建)




你可能感兴趣的:(hadoop学习之)