python实现从ftp上下载文件的实例方法


Posted in Python onJuly 19, 2020

python从ftp上下载文件的方法:

首先导入ftp模块;

然后使用【chdir】命令切换工作路径;

再使用“self.ftp.nlst()”命令获取目录下的文件;

最后使用“self.ftp.retrbinary()”命令下载ftp文件即可。

#!/usr/bin/python
# coding=utf-8
import os
from ftplib import FTP # 引入ftp模块
class MyFtp:
  ftp = FTP()  
  def __init__(self,host,port=21):
    self.ftp.connect(host,port)  
  def login(self,username,pwd):
    self.ftp.set_debuglevel(2) # 打开调试级别2,显示详细信息    
    self.ftp.login(username,pwd)    
    p
rint(self.ftp.welcome)  
  def downloadFile(self,localpath,remotepath,filename):
    os.chdir(localpath)  # 切换工作路径到下载目录
    self.ftp.cwd( remotepath)  # 要登录的ftp目录
    self.ftp.nlst() # 获取目录下的文件
    file_handle = open(filename,"wb").write  # 以写模式在本地打开文件
    self.ftp.retrbinary('RETR %s' % os.path.basename(filename),file_handle,blocksize=1024) # 下载ftp文件
    # ftp.delete(filename) # 删除ftp服务器上的文件
  def close(self):
    self.ftp.set_debuglevel(0) # 关闭调试    
    self.ftp.quit()if __name__ == '__main__':
  ftp = MyFtp('host')
  ftp.login('username','pwd')
  ftp.downloadFile('E:\\RED\\workspace\\appAuto\\apk\\Android10','/mobile/Android/release10/','xxx.apk')
  ftp.close()

实例扩展:

#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上下载文件的实例方法的文章就介绍到这了,更多相关python怎么实现从ftp上下载文件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python科学计算环境推荐——Anaconda
Jun 30 Python
手动实现把python项目发布为exe可执行程序过程分享
Oct 23 Python
Python和perl实现批量对目录下电子书文件重命名的代码分享
Nov 21 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 Python
对Python中DataFrame按照行遍历的方法
Apr 08 Python
Python 类的特殊成员解析
Jun 20 Python
python求最大值,不使用内置函数的实现方法
Jul 09 Python
python将图片转base64,实现前端显示
Jan 09 Python
Pytest参数化parametrize使用代码实例
Feb 22 Python
python shell命令行中import多层目录下的模块操作
Mar 09 Python
Python Django view 两种return的实现方式
Mar 16 Python
python热力图实现的完整实例
Jun 25 Python
python中关于数据类型的学习笔记
Jul 19 #Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 #Python
用python给csv里的数据排序的具体代码
Jul 17 #Python
python如何删除列为空的行
Jul 17 #Python
Python操作Elasticsearch处理timeout超时
Jul 17 #Python
python设置表格边框的具体方法
Jul 17 #Python
六种酷炫Python运行进度条效果的实现代码
Jul 17 #Python
You might like
php正则表达式使用的详细介绍
2013/04/27 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
浅谈php的优缺点
2015/07/14 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
JQUERY操作JSON实例代码
2010/02/09 Javascript
jquery操作select option 的代码小结
2011/06/21 Javascript
javascript控制swfObject应用介绍
2012/11/29 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
2018/12/12 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
在vue-cli创建的项目中使用sass操作
2020/08/10 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
[00:32]2018DOTA2亚洲邀请赛Mineski出场
2018/04/04 DOTA
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
Django model 中设置联合约束和联合索引的方法
2019/08/06 Python
python 列表推导式使用详解
2019/08/29 Python
Python命令行click参数用法解析
2019/12/19 Python
基于python3实现倒叙字符串
2020/02/18 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
Nayomi官网:沙特阿拉伯王国睡衣和内衣品牌
2020/12/19 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
学校岗位设置方案
2014/01/16 职场文书
《中国的气候》教学反思
2014/02/23 职场文书
学校校庆演讲稿
2014/05/22 职场文书
文明工地标语
2014/06/16 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
2014年维稳工作总结
2014/11/18 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
喋血孤城观后感
2015/06/08 职场文书
Python使用pyecharts控件绘制图表
2022/06/05 Python