Python 连接FTP

来源:互联网 发布:淘宝客推广爆款的技巧 编辑:程序博客网 时间:2024/05/16 06:10
# -*- encoding: utf8 -*-import osimport sysimport ftplib sys.setdefaultencoding('gbk')XFER_FILE = 'FILE'  _XFER_DIR = 'DIR'  class FTPSync(object):    def __init__(self):        self.conn = ftplib.FTP('192.168.8.5', 'tools', 'tools')        self.conn.cwd('/meteor')        # 远端FTP目录        os.chdir('./aa')        # 本地下载目录    def get_dirs_files(self):        u''' 得到当前目录和文件, 放入dir_res列表 '''        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):        print 'Walking to', 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()        print "FILES: ", files        print "DIRS: ", dirs        for f in files:            print next_dir, ':', 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()class Xfer(object):      '''''     @note: upload local file or dirs recursively to ftp server     '''      def __init__(self):          self.ftp = None            def __del__(self):          pass            def setFtpParams(self, ip, uname, pwd, port = 21, timeout = 60):                  self.ip = ip          self.uname = uname          self.pwd = pwd          self.port = port          self.timeout = timeout            def initEnv(self):          if self.ftp is None:              self.ftp = ftplib.FTP()              print '### connect ftp server: %s ...'%self.ip              self.ftp.connect(self.ip, self.port, self.timeout)              self.ftp.login(self.uname, self.pwd)               print self.ftp.getwelcome()            def clearEnv(self):          if self.ftp:              self.ftp.close()              print '### disconnect ftp server: %s!'%self.ip               self.ftp = None            def uploadDir(self, localdir='./', remotedir='./'):          if not os.path.isdir(localdir):                return          self.ftp.cwd(remotedir)           for file in os.listdir(localdir):              src = os.path.join(localdir, file)              if os.path.isfile(src):                  self.uploadFile(src, file)              elif os.path.isdir(src):                  try:                        self.ftp.mkd(file)                    except:                        sys.stderr.write('the dir is exists %s'%file)                  self.uploadDir(src, file)          self.ftp.cwd('..')            def uploadFile(self, localpath, remotepath='~/test'):          if not os.path.isfile(localpath):                return          print '+++ upload %s to %s:%s'%(localpath, self.ip, remotepath)          self.ftp.storbinary('STOR ' + remotepath, open(localpath, 'rb'))            def __filetype(self, src):          if os.path.isfile(src):              index = src.rfind('\\')              if index == -1:                  index = src.rfind('/')                              return _XFER_FILE, src[index+1:]          elif os.path.isdir(src):              return _XFER_DIR, ''                    def upload(self, src):          filetype, filename = self.__filetype(src)                    self.initEnv()          if filetype == _XFER_DIR:              self.srcDir = src                          self.uploadDir(self.srcDir)          elif filetype == _XFER_FILE:              self.uploadFile(src, filename)          self.clearEnv()                      if __name__ == '__main__':      srcDir = r"/Users/meteor/Desktop/gitlab/aa"  # srcFile = r'C:\sytst\sar.c'      xfer = Xfer()      xfer.setFtpParams('192.168.8.5', 'tools', 'tools')      xfer.upload(srcDir)          xfer.upload(srcFile)  

0 0
原创粉丝点击