使用Python通过FTP下载整个目录

时间:2016-07-31 19:19:57

标签: python ftp

尝试整理我的第一个有用的Python程序,目的是自动化我的网站备份。我看了一个关于如何下载单个文件的教程,但是当涉及到一个文件夹时我不太清楚。我想通过FTP从我的网站创建整个文件夹的本地备份。

到目前为止,我在this question的帮助下提出了这个问题:

from ftplib import FTP 
import os 

ftp=FTP("ftp.xxxxxxxxx.com") 
ftp.login("xxxxxxxxxxx","xxxxxxxxxx") #login to FTP account
print "Successfully logged in"
ftp.cwd("public_html") #change working directory to \public_html\
filenames = ftp.nlst() #create variable to store contents of \public_html\

os.makedirs("C:\\Users\\xxxxxx\\Desktop\\Backup")#create local backup directory
os.chdir("C:\\Users\\xxxxxx\\Desktop\\Backup")#change working directory to local backup directory

#for loop to download each file individually
for a in filenames:
    ftp.retrbinary("RETR " + a, file.write)
    file.close()


ftp.close()  #CLOSE THE FTP CONNECTION
print "FTP connection closed. Goodbye"

我不愿意运行它,因为我不想在我的网站上创建问题,如果它错了。我应该注意文件名&本地文件的扩展名应与正在下载的远程文件的扩展名完全匹配。

任何指导赞赏!

1 个答案:

答案 0 :(得分:2)

您无需更改工作目录,只需将文件保存在预期路径中即可。

要下载文件,首先需要获取文件名列表:

file_list = []
ftp.retrlines('LIST', lambda x: file_list.append(x.split()))

然后将文件与目录分开,然后下载它们:

for info in file_list:
    ls_type, name = info[0], info[-1]
    if not ls_type.startswith('d'):
        with open(name, 'wb') as f:
            ftp.retrbinary('RETR {}'.format(f), f.write)