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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。