FTP下载指定目录下所有内容,并按目录树结构保存文件

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()

第一篇文章,麻烦有用的老铁支持一下啊。。。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值