Python 如何使用完整的FTP路径下载FTP文件?

Python 如何使用完整的FTP路径下载FTP文件?,python,file-io,ftp,ftplib,Python,File Io,Ftp,Ftplib,使用Python中的ftplib,您可以下载文件,但似乎您只能使用文件名(而不是完整的文件路径)。以下代码成功下载了请求的代码: 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("MOD1

使用Python中的ftplib,您可以下载文件,但似乎您只能使用文件名(而不是完整的文件路径)。以下代码成功下载了请求的代码:

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()
)。之后,您需要声明文件名以下载驻留在当前目录中的文件。
使用完整路径/链接直接下载文件如何?

此解决方案使用模块中的urlopen函数。urlopen函数将允许您下载ftp和http URL。我喜欢使用它,因为您可以在一条线上连接并获取所有数据。最后三行从url提取文件名,然后将数据保存到该文件名

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()
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)

它可以工作,并且比设置当前目录快大约1秒。但是当我输入变量a而不是“ftp测试”时,它不起作用。@ArditSulce使用
类型(您的变量)检查您发送的内容
@Jacek和mislav:不,它不起作用,无论是Python 2还是Python 3。只要试着用一个替换“ftp测试”,你就会相信我。你不能写入磁盘上不存在的目录。首先你必须创建所需的目录结构。使用pythons
os.path.exists
+
os.makedirs