FTP下载指定目录下所有内容,并按目录树结构保存文件
、、、
大致思路就是进入FTP后判断目录下的文件属于文件夹还是文件,如果是文件直接下载,是文件夹则迭代判断后下载文件
、、、
from ftplib import FTP
import os
ip=xxxxxx
port=xxxxxx
username=xxxxxx
password=xxxxx
def ftp_download(down_path):
list_file = [] # 初始化 文件列表
list_folder = [] # 初始化 文件夹列表
if os.path.exists(save_path+down_path)==False:
os.makedirs(save_path+down_path)
ftp.cwd(down_path) #上一级目录
list_father =ftp.nlst()
for list in list_father:
try:
ftp.cwd(list) #判断是文件还是文件夹
ftp.cwd("..") #返回当前目录
except:
list_file.append(list) #如果是文件 加到文件列表
else:
list_folder.append(list) # 如果是文件夹 ,加到文件夹列表
for list in list_file: # 直接下载文件
down_path_file=down_path+'/'+list
save_path_file=save_path+down_path+'/'+list
f=open(save_path_file,'wb').write
ftp.retrbinary('RETR %s' % down_path_file, f, 1024)
for list in list_folder: # 迭代 进入文件夹 下载文件
down_path_folder=down_path+'/'+list
ftp_download(down_path_folder) # 迭代函数
def main():
try:
ftp.connect(ip, port)
except:
raise (IOError('FTP connect failed!'))
try:
ftp.login(username, password)
# print(ftp.pwd())
except:
raise (IOError("FTP login failed!"))
else:
print("********* ftp连接、登录成功!*********")
# 中文乱码问题
ftp.encoding = 'GB18030'
ftp_download(down_path)
if __name__ == "__main__":
save_path = r'C:\Users\10047895\Desktop\新建文件夹 (4)'
down_path = r'/A0A1A0N'
ftp = FTP()
main()
第一篇文章,麻烦有用的老铁支持一下啊。。。