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 相关文章推荐
在Django框架中运行Python应用全攻略
Jul 17 Python
Python中基础的socket编程实战攻略
Jun 01 Python
Python判断列表是否已排序的各种方法及其性能分析
Jun 20 Python
Python写的一个定时重跑获取数据库数据
Dec 28 Python
Python排序搜索基本算法之插入排序实例分析
Dec 11 Python
python spyder中读取txt为图片的方法
Apr 27 Python
pygame实现简易飞机大战
Sep 11 Python
Python的bit_length函数来二进制的位数方法
Aug 27 Python
从训练好的tensorflow模型中打印训练变量实例
Jan 20 Python
Pytest mark使用实例及原理解析
Feb 22 Python
使用jupyter notebook直接打开.md格式的文件
Apr 10 Python
pycharm软件实现设置自动保存操作
Jun 08 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中SESSION使用中的一点经验总结
2012/03/30 PHP
php读取远程gzip压缩网页的方法
2014/12/29 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
高质量PHP代码的50个实用技巧必备(上)
2016/01/22 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
javascript动态加载三
2012/08/22 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
轻松掌握JavaScript中的Math object数学对象
2016/05/26 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
vuejs事件中心管理组件间的通信详解
2017/08/09 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
vue element中axios下载文件(后端Python)
2019/05/10 Javascript
vue3.0 上手体验
2020/09/21 Javascript
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
详解Python打包分发工具setuptools
2019/08/05 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
python树的同构学习笔记
2019/09/14 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
python 实现二维列表转置
2019/12/02 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
开启Django博客的RSS功能的实现方法
2020/02/17 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
优秀班主任经验交流材料
2014/06/02 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
英语教师个人工作总结
2015/02/09 职场文书
浅谈mysql返回Boolean类型的几种情况
2021/06/04 MySQL