Heim  >  Artikel  >  Backend-Entwicklung  >  Python-FTP-Übertragung

Python-FTP-Übertragung

高洛峰
高洛峰Original
2016-10-18 10:34:561285Durchsuche

Der Zugriff auf FTP besteht aus nichts weiter als zwei Dingen: Hochladen und Herunterladen. Vor kurzem musste ich eine große Anzahl von Dateien von FTP im Projekt herunterladen, und dann habe ich versucht, mit meiner eigenen FTP-Operationsklasse zu experimentieren, wie folgt (PS : Mit diesem Absatz stimmt etwas nicht. Bitte kopieren Sie ihn nicht. Sie können darauf verweisen, um Ihre eigene FTP-Klasse zu testen.

import os
from ftplib import FTP
  
class FTPSync():
    def __init__(self, host, usr, psw, log_file):
        self.host = host
        self.usr = usr
        self.psw = psw
        self.log_file = log_file
      
    def __ConnectServer(self):
        try:
            self.ftp = FTP(self.host)
            self.ftp.login(self.usr, self.psw)
            self.ftp.set_pasv(False)
            return True
        except Exception:
            return False
      
    def __CloseServer(self):
        try:
            self.ftp.quit()
            return True
        except Exception:
            return False
      
    def __CheckSizeEqual(self, remoteFile, localFile):
        try:
            remoteFileSize = self.ftp.size(remoteFile)
            localFileSize = os.path.getsize(localFile)
            if localFileSize == remoteFileSize:
                return True
            else:
                return False
        except Exception:
            return None
          
    def __DownloadFile(self, remoteFile, localFile):
        try:
            self.ftp.cwd(os.path.dirname(remoteFile))
            f = open(localFile, 'wb')
            remoteFileName = 'RETR ' + os.path.basename(remoteFile)
            self.ftp.retrbinary(remoteFileName, f.write)
              
            if self.__CheckSizeEqual(remoteFile, localFile):
                self.log_file.write('The File is downloaded successfully to %s' + '\n' % localFile)
                return True
            else:
                self.log_file.write('The localFile %s size is not same with the remoteFile' + '\n' %localFile)
                return False
        except Exception:
            return False
      
    def __DownloadFolder(self, remoteFolder, localFolder):
        try:
            fileList = []
            self.ftp.retrlines('NLST', fileList.append)
            for remoteFile in fileList:
                localFile = os.path.join(localFolder, remoteFile)
                return self.__DownloadFile(remoteFile, localFile)
        except Exception:
            return False
      
    def SyncFromFTP(self, remoteFolder, localFolder):
        self.__DownloadFolder(remoteFolder, localFolder)
        self.log_file.close()
        self.__CloseServer()


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn