#!/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两个平台(至于其他平台没有测试))