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 相关文章推荐
Python中的装饰器用法详解
Jan 14 Python
使用PDB简单调试Python程序简明指南
Apr 25 Python
python Django批量导入不重复数据
Mar 25 Python
python实现远程通过网络邮件控制计算机重启或关机
Feb 22 Python
python3中的eval和exec的区别与联系
Oct 10 Python
python生成器用法实例详解
Nov 22 Python
Python线程条件变量Condition原理解析
Jan 20 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
Pytorch 使用CNN图像分类的实现
Jun 16 Python
使用BeautifulSoup4解析XML的方法小结
Dec 07 Python
Python爬虫实战之爬取携程评论
Jun 02 Python
python中opencv实现图片文本倾斜校正
Jun 11 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保存和输出文件
2006/10/09 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
php实现可逆加密的方法
2015/08/11 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
PHP使用Redis实现防止大并发下二次写入的方法
2017/10/09 PHP
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
基于jquery的无缝循环新闻列表插件
2011/03/07 Javascript
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
jQuery设置和获取HTML、文本和值示例
2014/07/08 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
购物车前端开发(jQuery和bootstrap3)
2016/08/27 Javascript
jQuery EasyUI Panel面板组件使用详解
2017/02/28 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
[45:44]完美世界DOTA2联赛PWL S2 FTD vs PXG 第一场 11.27
2020/12/01 DOTA
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
python3中os.path模块下常用的用法总结【推荐】
2018/09/16 Python
Python通过fnmatch模块实现文件名匹配
2020/09/30 Python
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
四查四看整改措施
2014/09/19 职场文书
个人查摆问题及整改措施
2014/10/16 职场文书
2014年医药代表工作总结
2014/11/22 职场文书
安全生产先进个人事迹材料
2014/12/30 职场文书
会计工作检讨书
2015/02/19 职场文书
初中物理教学反思
2016/02/19 职场文书
css height属性中的calc方法详解
2021/06/03 HTML / CSS
python中%格式表达式实例用法
2021/06/18 Python
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL
什么是clearfix (一文搞清楚css清除浮动clearfix)
2023/05/21 HTML / CSS