python实现ftp客户端示例分享


Posted in Python onFebruary 17, 2014
#!/usr/bin/python
#coding:utf-8
#write:JACK
#info:ftp example
import ftplib, socket, os
from time import sleep, ctime
def LoginFtp(self):
        ftps = ftplib.FTP()
        ftps.connect(self.host,self.port)
        ftps.login(self.name,self.passwd)
#未进行判断地址输入是否为ip或者域名;可以进行判断是否包含<或者实体符号以及';其他可以忽略
class LoFtp(object):
    'this is ftp class example'
    host = str(raw_input('host,127.0.0.1\n'))
    if host == '':host = '127.0.0.1'
    port = raw_input('port,21\n')
    if not(port.isdigit()):port =21
    name = str(raw_input('name,anonymous\n'))
    if name=='':name='anonymous'
    passwd = str(raw_input('password\n'))
    if passwd =='':passwd=''
    def ZqFtp(self,host,name,passwd,port):
        self.host = host
        self.name = name
        self.passwd = passwd
        self.port = port
    def LoginFtp(self):
        self.ftps = ftplib.FTP()
        self.ftps.connect(self.host,self.port)
        self.ftps.login(self.name,self.passwd)
        self.buffer = 2048 #设置缓存大小
    def ShowFtp(self):
        self.LoginFtp()
        self.ftps.dir('/')
        dirs = str(raw_input('PLEASE INPUT DIR!\n'))
        print self.ftps.dir(dirs)

    def UpFtp(self):
        'uploads files'
        self.LoginFtp()
        self.ftps.set_debuglevel(2)
        filename = str(raw_input('PLEASE FILE NAME!\n'))
        file_open=open(filename,'rb') #打开文件 可读即可
        self.ftps.storbinary('STOR %s'% os.path.basename(filename),file_open,self.buffer)
        # 上传文件
        self.ftps.set_debuglevel(0)
        file_open.close()
    def DelFtp(self):
        'Delete Files'
        self.LoginFtp()
        filename=str(raw_input('PLEASE DELETE FILE NAME!\n'))
        self.ftps.delete(filename)
    def RemoveFtp(self):
        'Remove File'
        self.LoginFtp()
        self.ftps.set_debuglevel(2)#调试级别,0无任何信息提示
        oldfile=str(raw_input('PLEASE OLD FILE NAME!\n'))
        newfile=str(raw_input('PLEASE NEW FILE NAME!\n'))
        self.ftps.rename(oldfile,newfile)
        self.ftps.set_debuglevel(0)
    def DownFtp(self):
        'Download File'
        self.LoginFtp()
        self.ftps.set_debuglevel(2)
        filename=str(raw_input('PLEASE FILE NAME!\n'))
        file_down = open(filename,'wb').write
        self.ftps.retrbinary('STOP %s' % os.path.basename(filename),file_down,self.buffer)
        self.ftps.set_debuglevel(0)
        file_down.close()
 
a = LoFtp()
print a.ShowFtp()
while True:
    helpn= str(raw_input('Whether to continue to view or exit immediately!(y/n/q)\n'))
    if (helpn=='y')or(helpn=='Y'):
        dirs = str(raw_input('PLEASE INPUT DIR!\n'))
        a.ftps.dir(dirs)
    elif (helpn=='q')or (helpn=='Q'):
        exit()
    else:
        break
 
while True:
    print '上传请选择----1'
    print '下载请选择----2'
    print '修改FTP文件名称----3'
    num = int(raw_input('PLEASE INPUT NUMBER![exit:5]\n'))
    if num ==1:
        upf = a.UpFtp()
        print 'Upfile ok!'
    elif num ==2:
        dof = a.DownFtp()
        print 'Download file ok!'
    elif num ==3:
        ref = a.RemoveFtp()
        print 'Remove file ok!'
    else:
        a.ftps.quit()
        print 'Bingo!'
        break

#login(user='anonymous',passwd='', acct='') 登录到FTP服务器,所有的参数都是可选的
#pwd()                                     得到当前工作目录
#cwd(path)                                 把当前工作目录设置为path
#dir([path[,...[,cb]])       显示path目录里的内容,可选的参数cb 是一个回调函数,它会被传给retrlines()方法
#nlst([path[,...])           与dir()类似,但返回一个文件名的列表,而不是显示这些文件名
#retrlines(cmd [, cb])       给定FTP 命令(如“RETR filename”),用于下载文本文件。可选的回调函数cb 用于处理文件的每一行
#retrbinary(cmd, cb[,bs=8192[, ra]])        与retrlines()类似,只是这个指令处理二进制文件。回调函数cb 用于处理每一块(块大小默认为8K)下载的数据。
#storlines(cmd, f)           给定FTP 命令(如“STOR filename”),以上传文本文件。要给定一个文件对象f
#storbinary(cmd, f[,bs=8192])               与storlines()类似,只是这个指令处理二进制文件。要给定一个文件对象f,上传块大小bs 默认为8Kbs=8192])
#rename(old, new)            把远程文件old 改名为new
#delete(path)                删除位于path 的远程文件
#mkd(directory)              创建远程目录
#每个需要输入的地方,需要进行排查检错。仅仅这个功能太小了。不过根据实际情况更改,放在bt里边当个小工具即可
#有点烂,没有做任何try
Python 相关文章推荐
python字符串,数值计算
Oct 05 Python
Python3.6日志Logging模块简单用法示例
Jun 14 Python
python中reader的next用法
Jul 24 Python
Pandas GroupBy对象 索引与迭代方法
Nov 16 Python
记录Python脚本的运行日志的方法
Jun 05 Python
Pyqt5实现英文学习词典
Jun 24 Python
Djang的model创建的字段和参数详解
Jul 27 Python
Python解析多帧dicom数据详解
Jan 13 Python
Pytorch 实现数据集自定义读取
Jan 18 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
python和C++共享内存传输图像的示例
Oct 27 Python
Python实现一个论文下载器的过程
Jan 18 Python
用smtplib和email封装python发送邮件模块类分享
Feb 17 #Python
python类参数self使用示例
Feb 17 #Python
python实现爬虫下载漫画示例
Feb 16 #Python
python发送邮件示例(支持中文邮件标题)
Feb 16 #Python
python定时器使用示例分享
Feb 16 #Python
python求素数示例分享
Feb 16 #Python
python检测服务器是否正常
Feb 16 #Python
You might like
PHP Directory 函数的详解
2013/03/07 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
学习ExtJS Column布局
2009/10/08 Javascript
jQuery事件绑定.on()简要概述及应用
2013/02/07 Javascript
jQuery输入城市查看地图使用介绍
2013/05/08 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
JavaScript中的标签语句用法分析
2015/02/10 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
微信小程序 前端源码逻辑和工作流详解
2016/10/08 Javascript
Move.js入门
2017/02/08 Javascript
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
JS删除String里某个字符的方法
2021/01/06 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
2019/12/01 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
JS 5种遍历对象的方式
2020/06/16 Javascript
Python求导数的方法
2015/05/09 Python
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
Python实现简单多线程任务队列
2016/02/27 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
pycharm新建一个python工程步骤
2019/07/16 Python
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
巴西最大的运动品牌:Olympikus
2020/07/14 全球购物
环境工程毕业生自荐信
2013/11/17 职场文书
教育学专业毕业生的自我评价
2013/11/21 职场文书
《梅兰芳学艺》教学反思
2014/02/24 职场文书
《画》教学反思
2014/04/14 职场文书
学校督导评估方案
2014/06/10 职场文书
小学生安全保证书
2015/05/09 职场文书
springBoot基于webSocket实现扫码登录
2021/06/22 Java/Android