Я пытаюсь загрузить определенный файл (с именем 010010-99999-year.gz) с FTP-сервера. Этот же файл, но за разные годы находится в разных каталогах FTP. Например:
ftp://ftp. ncdc.noaa.gov/pub/data/noaa/isd-lite/2000/010010-99999-1973.gz ftp://ftp.ncdc.noaa.gov/pub/data/noaa/isd-lite/2001/010010-99999 -1974.gz и так далее. На картинке показан один из каталогов:
Файл находится не во всех директориях (т.е. всех годах). В таком случае я хочу, чтобы скрипт игнорировал отсутствующие файлы, печатал «недоступно» и переходил к следующему каталогу (т.е. в следующем году). Я мог бы сделать это, используя список NLST, сначала создав список файлов в текущем каталоге FTP, а затем проверив, есть ли мой файл в этом списке, но это медленно, и NOAA (организация, владеющая сервером) не нравится список файлов (источник). Поэтому я придумал этот код:
def FtpDownloader2(url="ftp.ncdc.noaa.gov"):
ftp=FTP(url)
ftp.login()
for year in range(1901,2015):
ftp.cwd("/pub/data/noaa/isd-lite")
ftp.cwd(str(year))
fullStationId="010010-99999-%s.gz" % year
try:
file=open(fullStationId,"wb")
ftp.retrbinary('RETR %s' % fullStationId, file.write)
print("File is available")
file.close()
except:
print("File not available")
ftp.close()
Это правильно загружает существующие файлы (1973-2014 годы), но также создает пустые файлы за 1901-1972 годы. Файла нет в ФТП за 1901-1972 гг. Я делаю что-то неправильно при использовании try и кроме, или это какая-то другая проблема?