Guide to FTP via Python and Perl
Most programming languages have FTP client libraries. These can be used to grab data
from the BADC programmatically rather interactively. Two examples are given below. The first
uses Python to extract ECMWF ERA40 data and the second uses Perl to grab radiosonde data.
Python example
Python is available on most platforms and can be downloaded from www.python.org. The script below opens an FTP connection then loops
over a number of years, months, days, hours and variables. It constructs each file name and
then retrieves is to a local directory.
#!/usr/bin/env python
# Import required python modules
import ftplib
import os
# Define the local directory name to put data in
ddir="C:\\datadir"
# If directory doesn't exist make it
if not os.path.isdir(ddir):
os.mkdir(ddir)
# Change the local directory to where you want to put the data
os.chdir(ddir)
# login to FTP
f=ftplib.FTP("ftp.badc.rl.ac.uk", "", "")
# loop through years
for year in range(1990,2001):
# loop through months
for month in range(1,13):
# get number of days in the month
if year%4==0 and month==2:
ndays=29
else:
ndays=int("dummy 31 28 31 30 31 30 31 31 30 31 30
31".split()[month])
# loop through days
for day in range(1, ndays+1):
# loop through hours
for hour in range(0, 19, 6):
# loop through variables
for var in ("10u", "10v"):
# change the remote directory
f.cwd("/badc/ecmwf-e40/data/gg/as/%.4d/%.2d/%.2d" % (year, month, day))
# define filename
file="ggas%.4d%.2d%.2d%.2d%s.grb" % (year, month, day, hour, var)
# get the remote file to the local directory
f.retrbinary("RETR %s" % file, open(file,
"wb").write)
# Close FTP connection
f.close()
Perl example
Perl is available on most platforms and can be downloaded from www.perl.org.
The script below opens an FTP connection then downloads all the camborne radiosonde files for the current year.
# libraries for FTP and time strings
use Net::FTP;
use POSIX qw(strftime);
# Get this year
$thisyear = strftime("%Y", localtime);
# radiosonde directory with thisyears data in
$dir = "/badc/ukmo-rad/data/united_kingdom/camborne/$thisyear";
# Connect to BADC ftp server
$ftp = Net::FTP->new("ftp.badc.rl.ac.uk", Debug => 0 ) or die;
# Login
$ftp->login("",'') or die;
# change the remote directory
$ftp->cwd($dir) or die;
# list dir
@files = $ftp->ls($dir);
# get the remote file to the local directory
for $file (@files) {
print "Getting $file\n";
$ftp->get($file) or die;
}
# Close FTP connection
$ftp->quit;
 |
|
|
| Last Modified:
|  |