>  기사  >  백엔드 개발  >  파이썬 FTP 전송

파이썬 FTP 전송

高洛峰
高洛峰원래의
2016-10-18 10:34:561285검색

FTP에 액세스하는 것은 업로드와 다운로드의 두 가지에 지나지 않습니다. 최근 프로젝트의 ftp에서 많은 수의 파일을 다운로드해야 했고, 다음과 같이 자체 ftp 작업 클래스를 실험해 보았습니다(PS). : 이 문단에 문제가 있습니다. 복사하지 마세요. 자신의 FTP 클래스를 테스트하는 데 참고할 수 있습니다.)

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


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.