python下载FTP上面的文件夹

FTP指定文件夹里的内容下载到本地,文件夹到底有多少层不知道

这个地方用递归我知道,但是写了几次都报错

希望哪位大侠贴下代码,十分感谢了

作者: zp307300084   发布时间: 2011-06-14

本帖最后由 iamacnhero 于 2011-06-14 17:27 编辑

ftp_mirror.py
  1. # -*- encoding: utf8 -*-
  2. import os
  3. import sys
  4. import ftplib

  5. class FTPSync(object):
  6.     def __init__(self):
  7.         self.conn = ftplib.FTP('10.22.14.23', 'user', 'pass')
  8.         self.conn.cwd('/')        # 远端FTP目录
  9.         os.chdir('/data/')                # 本地下载目录

  10.     def get_dirs_files(self):
  11.         u''' 得到当前目录和文件, 放入dir_res列表 '''
  12.         dir_res = []
  13.         self.conn.dir('.', dir_res.append)
  14.         files = [f.split(None, 8)[-1] for f in dir_res if f.startswith('-')]
  15.         dirs = [f.split(None, 8)[-1] for f in dir_res if f.startswith('d')]
  16.         return (files, dirs)

  17.     def walk(self, next_dir):
  18.         print 'Walking to', next_dir
  19.         self.conn.cwd(next_dir)
  20.         try:
  21.             os.mkdir(next_dir)
  22.         except OSError:
  23.             pass
  24.         os.chdir(next_dir)

  25.         ftp_curr_dir = self.conn.pwd()
  26.         local_curr_dir = os.getcwd()

  27.         files, dirs = self.get_dirs_files()
  28.         print "FILES: ", files
  29.         print "DIRS: ", dirs
  30.         for f in files:
  31.             print next_dir, ':', f
  32.             outf = open(f, 'wb')
  33.             try:
  34.                 self.conn.retrbinary('RETR %s' % f, outf.write)
  35.             finally:
  36.                 outf.close()
  37.         for d in dirs:
  38.             os.chdir(local_curr_dir)
  39.             self.conn.cwd(ftp_curr_dir)
  40.             self.walk(d)

  41.     def run(self):
  42.         self.walk('.')

  43. def main():
  44.     f = FTPSync()
  45.     f.run()

  46. if __name__ == '__main__':
  47.     main()
复制代码

作者: iamacnhero   发布时间: 2011-06-14