使用Python操作FTP实现上传和下载的方法


Posted in Python onApril 01, 2019

搭建ftp服务器server端

# -*- coding:utf-8 -*-
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
# 实例化DummyAuthorizer来创建ftp用户
authorizer = DummyAuthorizer()
# 参数:用户名,密码,目录,权限
authorizer.add_user('admin', '123456', r'C:\Users\Administrator\Desktop\ftp', perm='elradfmwMT')
# 匿名登录
# authorizer.add_anonymous('/home/nobody')
handler = FTPHandler
handler.authorizer = authorizer
# 参数:IP,端口,handler
server = FTPServer(('0.0.0.0', 2121), handler)      #设置为0.0.0.0为本机的IP地址
server.serve_forever()

函数释义

Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件,函数列举如下

ftp登陆连接
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相关命令操作
ftp.cwd(pathname)         #设置FTP当前操作的路径
ftp.dir()             #显示目录下所有目录信息
ftp.nlst()            #获取目录下的文件
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.retrbinary("RETR filename.txt",file_handel,bufsize) #下载FTP文件

FTP.quit()与FTP.close()的区别

  • FTP.quit():发送QUIT命令给服务器并关闭掉连接。这是一个比较“缓和”的关闭连接方式,但是如果服务器对QUIT命令返回错误时,会抛出异常。
  • FTP.close():单方面的关闭掉连接,不应该用在已经关闭的连接之后,例如不应用在FTP.quit()之后。

例:下载、上传文件

# coding: utf-8
from ftplib import FTP
import time
import tarfile
import os
# !/usr/bin/python
# -*- coding: utf-8 -*-
from ftplib import FTP
def ftpconnect(host, username, password):
  ftp = FTP()
  # ftp.set_debuglevel(2)
  ftp.connect(host, 21)
  ftp.login(username, password)
  return ftp
#从ftp下载文件
def downloadfile(ftp, remotepath, localpath):
  bufsize = 1024
  fp = open(localpath, 'wb')
  ftp.retrbinary('RETR ' + remotepath, fp.write, bufsize)
  ftp.set_debuglevel(0)
  fp.close()
#从本地上传文件到ftp
def uploadfile(ftp, remotepath, localpath):
  bufsize = 1024
  fp = open(localpath, 'rb')
  ftp.storbinary('STOR ' + remotepath, fp, bufsize)
  ftp.set_debuglevel(0)
  fp.close()
if __name__ == "__main__":
  ftp = ftpconnect("113.105.139.xxx", "ftp***", "Guest***")
  downloadfile(ftp, "Faint.mp4", "C:/Users/Administrator/Desktop/test.mp4")
  #调用本地播放器播放下载的视频
  os.system('start "C:\Program Files\Windows Media Player\wmplayer.exe" "C:/Users/Administrator/Desktop/test.mp4"')
  uploadfile(ftp, "C:/Users/Administrator/Desktop/test.mp4", "test.mp4")
  ftp.quit()

FTP对象方法说明

  • 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 用于处理每一块(块大小默认为 8KB)下载的数据
  • storlines(cmd, f) 给定 FTP 命令(如“ STOR filename”),用来上传文本文件。要给定一个文件对象 f
  • storbinary(cmd, f,[,bs=8192]) 与 storlines()类似,只是这个指令处理二进制文件。要给定一个文件对象 f,上传块大小 bs 默认为 8KB
  • rename(old, new) 把远程文件 old 重命名为 new
  • delete(path) 删除位于 path 的远程文件
  • mkd(directory) 创建远程目录
  • rmd(directory) 删除远程目录
  • quit() 关闭连接并退出

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
python开发之文件操作用法实例
Nov 13 Python
TensorFlow安装及jupyter notebook配置方法
Sep 08 Python
django模板语法学习之include示例详解
Dec 17 Python
分享Pycharm中一些不为人知的技巧
Apr 03 Python
Python中一些不为人知的基础技巧总结
May 19 Python
opencv与numpy的图像基本操作
Mar 08 Python
Python完成毫秒级抢淘宝大单功能
Jun 06 Python
基于python 微信小程序之获取已存在模板消息列表
Aug 05 Python
python实现简易学生信息管理系统
Apr 05 Python
Python 异常处理Ⅳ过程图解
Oct 18 Python
python通过matplotlib生成复合饼图
Feb 06 Python
超级详细实用的pycharm常用快捷键
May 12 Python
Python提取特定时间段内数据的方法实例
Apr 01 #Python
如何使用Python进行OCR识别图片中的文字
Apr 01 #Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 #Python
详解Python网络框架Django和Scrapy安装指南
Apr 01 #Python
详解python的argpare和click模块小结
Mar 31 #Python
linux安装python修改默认python版本方法
Mar 31 #Python
Django中使用Whoosh进行全文检索的方法
Mar 31 #Python
You might like
使用PHP模拟HTTP认证
2006/10/09 PHP
BBS(php & mysql)完整版(三)
2006/10/09 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
2015/12/10 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
借助script进行Http跨域请求:JSONP实现原理及代码
2013/03/19 Javascript
js展开闭合效果演示代码
2013/07/24 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
2013/12/11 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
Vue中父组件向子组件通信的方法
2017/07/11 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
如何在VUE中使用vue-awesome-swiper
2021/01/04 Vue.js
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
python无限生成不重复(字母,数字,字符)组合的方法
2018/12/04 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
中医临床专业自我鉴定范文
2014/01/15 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
村委会贫困证明范文
2014/09/21 职场文书
老人再婚离婚协议书范本
2014/10/27 职场文书
自我检讨书范文
2015/01/28 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
工作犯错保证书
2015/05/11 职场文书
幼儿教师师德培训心得体会
2016/01/09 职场文书
Python打包exe时各种异常处理方案总结
2021/05/18 Python
muduo TcpServer模块源码分析
2022/04/26 Redis