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

#!/usr/bin/python
# -*- coding: UTF-8 -*-

from ftplib import FTP
import os
import re

ftp = FTP()
ftp.connect('192.168.124.110',21)
ftp.login('root', 'cmfchina@2011')
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 "文件下载完成"

 

此脚本亲测有效(适用于python2.x版本与python3.x版本,也适用于windows于linux两个平台(至于其他平台没有测试))

你可能感兴趣的:(python,FTP)