使用python ftplib包递归下载文件夹及文件

Posted 青蛙快飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用python ftplib包递归下载文件夹及文件相关的知识,希望对你有一定的参考价值。

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2018-06-11 09:35:49
# @Author  : Yaheng Wang ([email protected])
# @Link    : http://www.wy2160640.github.io
# @Version : $Id$

import os
import sys
from ftplib import FTP

class FTPSync(object):
    def __init__(self):
        self.conn = FTP(ftp.hapmap.org)
        self.conn.login()
        self.conn.cwd(hapmap/frequencies/)
        os.chdir(/home/ftp.hapmap.org/hapmap/frequencies/)

    def get_dirs_files(self):
        dir_res = []
        self.conn.dir(., dir_res.append)
        files = [f.split(None, 8)[-1] for f in dir_res if f.startswith(-)]
        dirs = [f.split(None, 8)[-1] for f in dir_res if f.startswith(d)]
        return files, dirs

    def walk(self, next_dir):
        sys.stderr.write(Walking to %s
%next_dir)
        self.conn.cwd(next_dir)
        try:
            os.mkdir(next_dir)
        except OSError:
            pass
        os.chdir(next_dir)
        ftp_curr_dir = self.conn.pwd()
        local_curr_dir = os.getcwd()
        files, dirs = self.get_dirs_files()
        sys.stdout.write("FILES: %s"%files)
        sys.stdout.write("DIRS: %s"%dirs)
        for f in files:
            sys.stdout.write("%s : %s"%(next_dir, f))
            sys.stdout.write("download : %s"%os.path.abspath(f))
            outf = open(f, "wb")
            try:
                self.conn.retrbinary("RETR %s"%f, outf.write)
            finally:
                outf.close()
        for d in dirs:
            os.chdir(local_curr_dir)
            self.conn.cwd(ftp_curr_dir)
            self.walk(d)

    def run(self):
        self.walk(.)

def main():
    f = FTPSync()
    f.run()


if __name__ == __main__:
    main()

 

以上是关于使用python ftplib包递归下载文件夹及文件的主要内容,如果未能解决你的问题,请参考以下文章

python使用ftplib模块实现FTP文件的上传下载

python ftplib下载文件封装

Python之ftplib模块

python:使用ftplib编写FTP客户端

Python 3 ftplib错误“名称或服务未知”

python ftplib模块