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

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

本程序可列出 FTP 服务器的全部目录结构,并将其树状结构以文本格式输出,具有以下特点: 1、使用单线程连接 FTP,适应恶劣网络条件,断线后可自动重连,可设置重试次数、手动跳过等; 2、支持与 cmd 的 tree 命令相同格式的目录树文本输出,可依据输出参数设置重复输出结果; 3、可指定需要列表的 FTP目录、递归目录深度、结果输出格式(是否包含文件、是否输出文件大小信息等); 4、可指定单个目录获取出错时的最大尝试次数,可手动跳过某个获取出错的目录; 5、可设置常见的 FTP 连接、传输参数,支持中文目录/文件名; 6、运行过程中可暂停/继续、中止,可随时输出当前已获取到的部分结果; 7、结果可保存文件,载入后可重新输出结果,也可以继续上次未成功完成的部分; 8、支持隐藏为托盘区图标和气泡提示,任务完成后自动断开 FTP 连接; 9、基于 VS2008 C# 编写,使用 FtpWebRequest 实现,提供可执行程序及全部源代码。 若有其它问题,欢迎与我联系交流:heweiqi0086@126.com,^_^ ============= 版本更新记录 ============= 说明: [+]增加功能特性 [-]较少功能特性 [!]改进已有功能 [X]修正已有Bug ---------------- - 1.6.9.0802 - ---------------- [+]可以设定每隔指定的获取记录数自动保存结果到文件。 [+]保存结果文件可以 GZip 格式压缩,但速度较慢、较耗内存。 [+]增加一种快速存储文件的方式,在测试中速度可以提高7-30倍。 [+]可以设定任务结束后是否自动输出结果。 [+]输出结果时可以直接输出到文件。 [+]可以手动进行内存整理,即时释放闲置内存。 [!]外观修改,原外观在win2003下很难看。 [!]界面布局修改。 [X]在不运行任务情况下,载入结果再保存的话会异常。 ---------------- - 1.5.9.0717 - ---------------- [+]错误达到指定次数后显示提示信息时,可指定是否暂停后续尝试。 [+]显示当前文件夹获取进度条。 [+]保持当前结果到文件,可重新载入,以便重新输出结果,也可以继续上次未成功完成的搜索任务。 [!]提高实时生效参数的灵敏性,若输入无效数字字符(如abc),会自动修改为默认值,不会导致程序异常。 [!]等待重连过程中,会有时间倒数提示,并且能即时中止任务。 [!]界面布局修改。 [!]修改提示信息文字。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值