2013-10-12 2 views
1

파이썬에서 ftplib을 사용하면 파일을 다운로드 할 수 있지만 전체 파일 경로가 아닌 파일 이름 만 사용하도록 제한된 것으로 보입니다.전체 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

하지만 "ftp-test"대신 변수 a를 입력하면 작동하지 않습니다 – multigoodverse

1

이 솔루션은 urllib 모듈의 urlopen 기능을 사용합니다. urlopen 함수를 사용하면 ftp 및 http url을 다운로드 할 수 있습니다. 나는 당신이 하나의 라인에 모든 데이터를 연결하고 얻을 수 있기 때문에 그것을 사용하는 것을 좋아한다. 마지막 세 줄은 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) 
관련 문제