Python使用ftplib实现简易FTP客户端的方法


Posted in Python onJune 03, 2015

本文实例讲述了Python使用ftplib实现简易FTP客户端的方法。分享给大家供大家参考。具体实现方法如下:

#!/usr/bin/python 
#-*- coding:utf-8 -*- 
from ftplib import FTP   #加载ftp模块 
ftp=FTP()          #设置变量 
ftp.set_debuglevel(2)    #打开调试级别2,显示详细信息 
ftp.connect("IP","port")  #连接的ftp sever和端口 
ftp.login("user","password")#连接的用户名,密码 
print ftp.getwelcome()   #打印出欢迎信息 
ftp.cmd("xxx/xxx")     #更改远程目录 
bufsize=1024        #设置的缓冲区大小 
filename="filename.txt"   #需要下载的文件 
file_handle=open(filename,"wb").write
#以写模式在本地打开文件 
ftp.retrbinaly("RETR filename.txt",file_handle,bufsize)
#接收服务器上文件并写入本地文件 
ftp.set_debuglevel(0)    #关闭调试模式 
ftp.quit          #退出ftp 
ftp.dir()          #显示目录下文件信息 
ftp.mkd(pathname)      #新建远程目录 
ftp.pwd()          #返回当前所在位置 
ftp.rmd(dirname)      #删除远程目录 
ftp.delete(filename)    #删除远程文件 
ftp.rename(fromname, toname)#将fromname修改名称为toname。 
ftp.storbinaly("STOR filename.txt",file_handel,bufsize) #上传目标文件

一个FTP完整实例:

#coding:utf-8 
from ctypes import * 
import os 
import sys 
import ftplib 
class myFtp: 
  ftp = ftplib.FTP() 
  bIsDir = False 
  path = "" 
  def __init__(self, host, port='21'): 
    self.ftp.set_debuglevel(2) #打开调试级别2,显示详细信息  
    #self.ftp.set_pasv(0)  #0主动模式 1 #被动模式 
    self.ftp.connect( host, port ) 
  def Login(self, user, passwd ): 
    self.ftp.login( user, passwd ) 
    print self.ftp.welcome 
  def DownLoadFile( self, LocalFile, RemoteFile ): 
    file_handler = open( LocalFile, 'wb' ) 
    self.ftp.retrbinary( "RETR %s" %( RemoteFile ), file_handler.write )  
    file_handler.close() 
    return True 
  def UpLoadFile( self, LocalFile, RemoteFile ): 
    if os.path.isfile( LocalFile ) == False: 
      return False 
    file_handler = open( LocalFile, "rb" ) 
    self.ftp.storbinary( 'STOR %s'%RemoteFile, file_handler, 4096 )
    file_handler.close() 
    return True 
  def UpLoadFileTree( self, LocalDir, RemoteDir ): 
    if os.path.isdir( LocalDir ) == False: 
      return False 
    LocalNames = os.listdir( LocalDir ) 
    print RemoteDir 
    self.ftp.cwd( RemoteDir ) 
    for Local in LocalNames: 
      src = os.path.join( LocalDir, Local) 
      if os.path.isdir( src ): 
        self.UpLoadFileTree( src, Local ) 
      else: 
        self.UpLoadFile( src, Local ) 
    self.ftp.cwd( ".." ) 
    return 
  def DownLoadFileTree( self, LocalDir, RemoteDir ): 
    if os.path.isdir( LocalDir ) == False: 
      os.makedirs( LocalDir ) 
    self.ftp.cwd( RemoteDir ) 
    RemoteNames = self.ftp.nlst()  
    for file in RemoteNames: 
      Local = os.path.join( LocalDir, file ) 
      if self.isDir( file ): 
        self.DownLoadFileTree( Local, file )         
      else: 
        self.DownLoadFile( Local, file ) 
    self.ftp.cwd( ".." ) 
    return 
  def show( self, list ): 
    result = list.lower().split( " " ) 
    if self.path in result and "<dir>" in result: 
      self.bIsDir = True 
  def isDir( self, path ): 
    self.bIsDir = False 
    self.path = path 
    #this ues callback function ,that will change bIsDir value 
    self.ftp.retrlines( 'LIST', self.show ) 
    return self.bIsDir 
  def close( self ): 
    self.ftp.quit() 
ftp = myFtp('********') 
ftp.Login('*****','*****') 
#ftp.DownLoadFile('TEST.TXT', 'others\\runtime.log')#ok 
#ftp.UpLoadFile('runtime.log', 'others\\runtime.log')#ok 
#ftp.DownLoadFileTree('bcd', 'others\\abc')#ok 
#ftp.UpLoadFileTree('aaa',"others\\" ) 
ftp.close()
print "ok!"

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
神经网络(BP)算法Python实现及应用
Apr 16 Python
Python 通配符删除文件的实例
Apr 24 Python
详谈python在windows中的文件路径问题
Apr 28 Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
Jan 26 Python
利用python将图片版PDF转文字版PDF
May 03 Python
用python生成与调用cntk模型代码演示方法
Aug 26 Python
15行Python代码实现免费发送手机短信推送消息功能
Feb 27 Python
Python脚本导出为exe程序的方法
Mar 25 Python
keras读取h5文件load_weights、load代码操作
Jun 12 Python
python中pow函数用法及功能说明
Dec 04 Python
Python爬虫入门教程02之笔趣阁小说爬取
Jan 24 Python
Python中的深拷贝和浅拷贝详解
Jun 03 #Python
python下paramiko模块实现ssh连接登录Linux服务器
Jun 03 #Python
python处理二进制数据的方法
Jun 03 #Python
Python读写配置文件的方法
Jun 03 #Python
python操作ssh实现服务器日志下载的方法
Jun 03 #Python
Python实现建立SSH连接的方法
Jun 03 #Python
解密Python中的描述符(descriptor)
Jun 03 #Python
You might like
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
2013/06/05 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
laravel 4安装及入门图文教程
2014/10/29 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
php之header的不同用法总结(实例讲解)
2017/11/28 PHP
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
利用onresize使得div可以随着屏幕大小而自适应的代码
2010/01/15 Javascript
用JavaScript获取DOM元素位置和尺寸大小的方法
2013/04/12 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
2016/10/25 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
jQuery实现合并表格单元格中相同行操作示例
2019/01/28 jQuery
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
[01:12]快闪回顾DOTA2亚洲邀请赛(DAC) 静候2018新征程开启
2018/03/11 DOTA
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
python实现对求解最长回文子串的动态规划算法
2018/06/02 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
Pytorch对Himmelblau函数的优化详解
2020/02/29 Python
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
应用电子技术专业个人求职信
2013/09/21 职场文书
企业行政文员岗位职责
2013/12/03 职场文书
致标枪运动员加油稿
2014/02/15 职场文书
空乘英文求职信
2014/04/13 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
民事纠纷协议书
2016/03/23 职场文书
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android