2013-10-12 3 views
1

Используя ftplib в Python, вы можете скачивать файлы, но, похоже, вам запрещено использовать только имя файла (а не полный путь к файлу). Следующий код успешно загружает требуемый код:Как загрузить FTP-файл, используя его полный путь FTP?

import ftplib 
ftp=ftplib.FTP("ladsweb.nascom.nasa.gov") 
ftp.login() 
ftp.cwd("/allData/5/MOD11A1/2002/001") 
ftp.retrbinary('RETR MOD11A1.A2002001.h00v08.005.2007079015634.hdf',open("MOD11A1.A2002001.h00v08.005.2007079015634.hdf",'wb').write) 

Как вы можете видеть, первый логин к сайту (ftp.login()) устанавливаются, а затем текущий каталог установлен (ftp.cwd()). После этого вам нужно объявить имя файла для загрузки файла, который находится в текущем каталоге. Как насчет загрузки файла напрямую, используя его полный путь/ссылку?

ответ

2
import ftplib 

ftp = ftplib.FTP("ladsweb.nascom.nasa.gov") 
ftp.login() 

a = 'allData/5/MOD11A1/2002/001/MOD11A1.A2002001.h00v08.005.2007079015634.hdf' 
fhandle = open('ftp-test', 'wb') 
ftp.retrbinary('RETR ' + a, fhandle.write) 
fhandle.close() 
+0

Это работает, и это примерно на 1 секунду быстрее, чем при установке текущего каталога. – multigoodverse

+0

Рад слышать :) – mislavcimpersak

+0

Но когда я ввожу переменную a вместо «ftp-test», она не работает. – multigoodverse

1

Это решение использует функцию urlopen в модуле urllib. Функция urlopen позволит вам загружать URL-адреса ftp и http. Мне нравится использовать его, потому что вы можете подключаться и получать все данные в одной строке. Последние три строки извлекают имя файла из URL-адреса и затем сохраняют данные в этом имени файла.

from urllib import urlopen 
url = 'ftp://ladsweb.nascom.nasa.gov/allData/5/MOD11A1/2002/001/MOD11A1.A2002001.h00v08.005.2007079015634.hdf' 
data = urlopen(url).read() 
filename = url.split('/')[-1] 
with open(filename, 'wb') as f: 
    f.write(data) 
Смежные вопросы