python实现FTP循环上传文件
本文实例为大家分享了python实现FTP循环上传文件的具体代码,供大家参考,具体内容如下
测试过程中,有时会用到FTP的数据流,或者需要使用FTP反复上传文件,所以写了一个FTP循环上传文件的python代码。
代码如下:
#coding=utf-8 importsys importos fromftplibimportFTP fromtimeimportsleep _XFER_FILE='FILE' _XFER_DIR='DIR' classTransmitter(object):#注意:递归上传本地文件或dirs到ftp服务器 def__init__(self): self.ftp=None def__del__(self): pass defsetFtpParams(self,ip,uname,pwd,port=21,timeout=60): self.ip=ip self.uname=uname self.pwd=pwd self.port=port self.timeout=timeout definitEnv(self): ifself.ftpisNone: self.ftp=FTP() print('###连接FTP服务器:%s...'%self.ip) self.ftp.connect(self.ip,self.port,self.timeout) self.ftp.login(self.uname,self.pwd) defclearEnv(self): ifself.ftp: self.ftp.close() print('###断开FTP服务器:%s!'%self.ip) self.ftp=None defuploadDir(self,localdir='./',remotedir='./'): ifnotos.path.isdir(localdir): return self.ftp.cwd(remotedir) forfileinos.listdir(localdir): src=os.path.join(localdir,file) ifos.path.isfile(src): self.uploadFile(src,file) elifos.path.isdir(src): try: self.ftp.mkd(file) except: sys.stderr.write('目录存在%s'%file) self.uploadDir(src,file) self.ftp.cwd('..') defuploadFile(self,localpath,remotepath='./'): ifnotos.path.isfile(localpath): return print('+++上传%sto%s:%s'%(localpath,self.ip,remotepath)) self.ftp.storbinary('STOR'+remotepath,open(localpath,'rb')) sleep(0.5) try: self.ftp.delete(remotepath) except: pass #delfilewhenuploadedthisfile #os.remove(localpath) #sleep(1) def__filetype(self,src): ifos.path.isfile(src): index=src.rfind('\\') ifindex==-1: index=src.rfind('/') return_XFER_FILE,src[index+1:] elifos.path.isdir(src): return_XFER_DIR,'' defupload(self,src): filetype,filename=self.__filetype(src) self.initEnv() iffiletype==_XFER_DIR: self.srcDir=src self.uploadDir(self.srcDir) eliffiletype==_XFER_FILE: self.uploadFile(src,filename) self.clearEnv() if__name__=='__main__': srcDir=r'C:\Users\Administrator\Downloads\FTP\smp' transmitter=Transmitter() transmitter.setFtpParams('10.44.0.2','admin','123123') whileTrue: transmitter.upload(srcDir) sleep(4)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。