使用python遍历 下载FTP 的所有文件,包含子目录的文件

from ftplib import FTP
import os
import re

ftp = FTP()
ftp.connect('host',port)
ftp.login('usr', 'passwd')
Server_path = "/opt/test"
Client_path="C:\Users\Administrator\Desktop\m_test"
sum1 = 0
sum2 = 0
value = 0
FTP_Dir_l = []
Ftp_file_l = []
if re.search(r".*/$",Server_path):
    pass
else:
    Server_path = Server_path+"/"

#判断本地路径是否存在
if os.path.exists(Client_path):
    print Client_path,"不存在,将创建"
    os.makedirs(Client_path)
 

#遍历获取FTP 上面的目录
def search_dir(start_dir):
    ftp.cwd(start_dir)
    FTP_Dir_l.append(ftp.pwd())
    dir_res = []
    ftp.dir('.', dir_res.append)   #对当前目录进行dir(),将结果放入列表
    for i in dir_res:
        if i.startswith("d"):
            global sum1 
            sum1 += 1
            search_dir(ftp.pwd()+"/"+i.split(" ")[-1])
            ftp.cwd('..')
        else:
            global sum2, value
            sum2 += 1
            val = i.split(" ")[-1]
            value += ftp.size(val)

#遍历获取FTP 上面的文件
def search_file(Dir_path):
    search_dir(Dir_path)
    for Server_f_l in FTP_Dir_l:
        file_list = ftp.nlst(Server_f_l)
        for Server_file in file_list:
            if Server_file not in FTP_Dir_l:
                Ftp_file_l.append(Server_file) #将文件添加到列表

#遍历获取FTP 上面的文件
search_file(Server_path)

#检测本地目录是否存在
os.chdir(Client_path)
for local_dir in FTP_Dir_l:
    if os.path.isdir(local_dir.split(Server_path,1)[-1]):
        pass
    else:
        print (local_dir.split(Server_path,1)[-1],":本地不存在此目录,将创建")
        os.makedirs(local_dir.split(Server_path,1)[-1])

#进行文件下载操作
for Get_f in Ftp_file_l:
    print (Get_f,"将被下载到本地的",Client_path+os.sep+Get_f.split(Server_path,1)[-1])
    fp = open(Client_path+os.sep+Get_f.split(Server_path,1)[-1],'wb')
    ftp.retrbinary('RETR ' +Get_f,fp.write,1024)
ftp.close() #退出连接
print ("文件下载完成")

版权声明:本文为lingchuxiao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。