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编写朴素贝叶斯用于文本分类
Dec 21 Python
解决Python的str强转int时遇到的问题
Apr 09 Python
对python中的iter()函数与next()函数详解
Oct 18 Python
python将txt等文件中的数据读为numpy数组的方法
Dec 22 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
python批量将excel内容进行翻译写入功能
Oct 10 Python
Python编程快速上手——选择性拷贝操作案例分析
Feb 28 Python
Python函数默认参数常见问题及解决方案
Mar 26 Python
Numpy 多维数据数组的实现
Jun 18 Python
使用python编写一个语音朗读闹钟功能的示例代码
Jul 14 Python
在PyCharm中安装PaddlePaddle的方法
Feb 05 Python
Python 快速验证代理IP是否有效的方法实现
Jul 15 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
第九节 绑定 [9]
2006/10/09 PHP
PHP脚本中include文件出错解决方法
2008/11/20 PHP
php列出一个目录下的所有文件的代码
2012/10/09 PHP
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
Javascript函数的参数
2015/07/16 Javascript
js实现简洁的TAB滑动门效果代码
2015/09/06 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
2016/06/28 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
[00:34]拔城逐梦,热血永恒!2020(秋)完美世界城市挑战赛报名开启
2020/10/09 DOTA
Python正则表达式匹配ip地址实例
2014/10/09 Python
在Django框架中运行Python应用全攻略
2015/07/17 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
Python面向对象程序设计示例小结
2019/01/30 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
win10安装python3.6的常见问题
2020/07/01 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
HTML5-WebSocket实现聊天室示例
2016/12/15 HTML / CSS
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
运动会广播稿60字
2014/01/15 职场文书
2014年上半年工作自我评价
2014/01/18 职场文书
2014年终个人总结报告
2015/03/09 职场文书
地道战观后感500字
2015/06/04 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL