温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-03-23 10:24:33 来源:亿速云 阅读:148 作者:小新 栏目:开发技术

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

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

#coding=utf-8 '''  ftp自动下载、自动上传脚本,可以递归目录操作 ''' from ftplib import FTP import os,sys,string,datetime,time import socket class MYFTP:  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)  def login(self):  ftp = self.ftp  try:   timeout = 300  socket.setdefaulttimeout(timeout)  ftp.set_pasv(True)  print u'开始连接到 %s' %(self.hostaddr)  ftp.connect(self.hostaddr, self.port)  print u'成功连接到 %s' %(self.hostaddr)  print u'开始登录到 %s' %(self.hostaddr)  ftp.login(self.username, self.password)  print u'成功登录到 %s' %(self.hostaddr)  debug_print(ftp.getwelcome())  except Exception:  print u'连接或登录失败'  try:  ftp.cwd(self.remotedir)  except(Exception):  print u'切换目录失败'  def is_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:%d remotefile_size:%d' %(localfile_size, remotefile_size),)  if remotefile_size == localfile_size:  return 1  else:  return 0  def download_file(self, localfile, remotefile):  if self.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()  def download_files(self, localdir='./', remotedir='./'):  try:  self.ftp.cwd(remotedir)  except:  debug_print(u'目录%s不存在,继续...' %remotedir)  return  if not os.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  for item in remotenames:  filetype = item[0]  filename = item[1]  local = os.path.join(localdir, filename)  if filetype == 'd':  self.download_files(local, filename)  elif filetype == '-':  self.download_file(local, filename)  self.ftp.cwd('..')  debug_print(u'返回上层目录 %s' %self.ftp.pwd())  def upload_file(self, localfile, remotefile):  if not os.path.isfile(localfile):  return  if self.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)  def upload_files(self, localdir='./', remotedir = './'):  if not os.path.isdir(localdir):  return  localnames = os.listdir(localdir)  self.ftp.cwd(remotedir)  for item in localnames:  src = os.path.join(localdir, item)  if os.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('..')  def get_file_list(self, line):  ret_arr = []  file_arr = self.get_filename(line)  if file_arr[1] not in ['.', '..']:  self.file_list.append(file_arr)    def get_filename(self, line):  pos = line.rfind(':')  while(line[pos] != ' '):  pos += 1  while(line[pos] == ' '):  pos += 1  file_arr = [line[0], line[pos:]]  return file_arr def debug_print(s):  print s 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服务器下载文件的示例”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI