• Python之FTP传输


    访问FTP,无非两件事情:upload和download,最近在项目中需要从ftp下载大量文件,然后我就试着去实验自己的ftp操作类,如下(PS:此段有问题,别复制使用,可以参考去试验自己的ftp类!)

    '''
    Created on Jun 19, 2013
    
    @author: Berlin
    '''
    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' + '
    ' % localFile)
                    return True
                else:
                    self.log_file.write('The localFile %s size is not same with the remoteFile' + '
    ' % 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()

    还有问题存在,最终版本不在此共享!

    最终版本主要改进:多线程上传与下载功能!

  • 相关阅读:
    NFC性价比高频读卡器首选方案:FM17550
    关于ESP8266和ESP8285的对比
    有没有比NRF51822更好的智能穿戴蓝牙方案
    zigbee CC2530首选方案模组:TZU06A1
    PAN3501兼容AS3933-BTST
    NRF51822和NRF52832的主要区别
    集成模拟温度传感器低成本2.4G CC2500RGPR 中文手册
    USB2.0主机控制器 UPD720114 简单详解
    存储器HK1225-7EQ 使用说明书资料
    爬虫 + 数据
  • 原文地址:https://www.cnblogs.com/berlin-sun/p/FTPInPython.html
Copyright © 2020-2023  润新知