python从ftp服务器下载文件的示例

这篇文章给大家分享的是有关python从ftp服务器下载文件的示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

代码之余,将代码过程重要的一些代码段备份一下,如下的代码内容是关于Python从ftp服务器下载文件的的代码,希望能对小伙伴有用途。

python从ftp服务器下载文件的示例

#coding=utf-8
'''
ftp自动下载、自动上传脚本,可以递归目录操作
'''

fromftplibimportFTP
importos,sys,string,datetime,time
importsocket

classMYFTP:
def__init__(self,hostaddr,username,password,remotedir,port=21):
self.hostaddr=hostaddr
self.username=username
self.password=password
self.remotedir=remotedir
self.port=port
self.ftp=FTP()
self.file_list=[]
#self.ftp.set_debuglevel(2)
def__del__(self):
self.ftp.close()
#self.ftp.set_debuglevel(0)
deflogin(self):
ftp=self.ftp
try:
timeout=300
socket.setdefaulttimeout(timeout)
ftp.set_pasv(True)
printu'开始连接到%s'%(self.hostaddr)
ftp.connect(self.hostaddr,self.port)
printu'成功连接到%s'%(self.hostaddr)
printu'开始登录到%s'%(self.hostaddr)
ftp.login(self.username,self.password)
printu'成功登录到%s'%(self.hostaddr)
debug_print(ftp.getwelcome())
exceptException:
printu'连接或登录失败'
try:
ftp.cwd(self.remotedir)
except(Exception):
printu'切换目录失败'

defis_same_size(self,localfile,remotefile):
try:
remotefile_size=self.ftp.size(remotefile)
except:
remotefile_size=-1
try:
localfile_size=os.path.getsize(localfile)
except:
localfile_size=-1
debug_print('localfile_size:%dremotefile_size:%d'%(localfile_size,remotefile_size),)
ifremotefile_size==localfile_size:
return1
else:
return0
defdownload_file(self,localfile,remotefile):
ifself.is_same_size(localfile,remotefile):
debug_print(u'%s文件大小相同,无需下载'%localfile)
return
else:
debug_print(u'>>>>>>>>>>>>下载文件%s......'%localfile)
#return
file_handler=open(localfile,'wb')
self.ftp.retrbinary(u'RETR%s'%(remotefile),file_handler.write)
file_handler.close()

defdownload_files(self,localdir='./',remotedir='./'):
try:
self.ftp.cwd(remotedir)
except:
debug_print(u'目录%s不存在,继续...'%remotedir)
return
ifnotos.path.isdir(localdir):
os.makedirs(localdir)
debug_print(u'切换至目录%s'%self.ftp.pwd())
self.file_list=[]
self.ftp.dir(self.get_file_list)
remotenames=self.file_list
#print(remotenames)
#return
foriteminremotenames:
filetype=item[0]
filename=item[1]
local=os.path.join(localdir,filename)
iffiletype=='d':
self.download_files(local,filename)
eliffiletype=='-':
self.download_file(local,filename)
self.ftp.cwd('..')
debug_print(u'返回上层目录%s'%self.ftp.pwd())
defupload_file(self,localfile,remotefile):
ifnotos.path.isfile(localfile):
return
ifself.is_same_size(localfile,remotefile):
debug_print(u'跳过[相等]:%s'%localfile)
return
file_handler=open(localfile,'rb')
self.ftp.storbinary('STOR%s'%remotefile,file_handler)
file_handler.close()
debug_print(u'已传送:%s'%localfile)
defupload_files(self,localdir='./',remotedir='./'):
ifnotos.path.isdir(localdir):
return
localnames=os.listdir(localdir)
self.ftp.cwd(remotedir)
foriteminlocalnames:
src=os.path.join(localdir,item)
ifos.path.isdir(src):
try:
self.ftp.mkd(item)
except:
debug_print(u'目录已存在%s'%item)
self.upload_files(src,item)
else:
self.upload_file(src,item)
self.ftp.cwd('..')

defget_file_list(self,line):
ret_arr=[]
file_arr=self.get_filename(line)
iffile_arr[1]notin['.','..']:
self.file_list.append(file_arr)

defget_filename(self,line):
pos=line.rfind(':')
while(line[pos]!=''):
pos+=1
while(line[pos]==''):
pos+=1
file_arr=[line[0],line[pos:]]
returnfile_arr
defdebug_print(s):
prints

if__name__=='__main__':
timenow=time.localtime()
datenow=time.strftime('%Y-%m-%d',timenow)
#配置如下变量
hostaddr='211.15.113.45'#ftp地址
username='UserName'#用户名
password='123456'#密码
port=21#端口号
rootdir_local='E:/mypiv'#本地目录
rootdir_remote='/PIV'#远程目录

f=MYFTP(hostaddr,username,password,rootdir_remote,port)
f.login()
f.download_files(rootdir_local,rootdir_remote)

timenow=time.localtime()
datenow=time.strftime('%Y-%m-%d',timenow)
logstr=u"%s成功执行了备份n"%datenow
debug_print(logstr)

感谢各位的阅读!关于“python从ftp服务器下载文件的示例”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

发布于 2021-03-24 01:19:58
收藏
分享
海报
0 条评论
168
上一篇:python实现用户管理系统的方法 下一篇:Servlet怎么实现登录功能
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码