使用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程序员鲜为人知但你应该知道的17个问题
Jun 04 Python
Python脚本实现自动发带图的微博
Apr 27 Python
Python中实现switch功能实例解析
Jan 11 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
Apr 09 Python
python列表list保留顺序去重的实例
Dec 14 Python
对python xlrd读取datetime类型数据的方法详解
Dec 26 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
Sep 26 Python
解决pycharm同一目录下无法import其他文件
Feb 12 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
Apr 02 Python
python爬虫要用到的库总结
Jul 28 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
Feb 26 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 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实现查询手机归属地的方法详解
2017/04/28 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
实例讲解PHP表单
2020/06/10 PHP
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
2017/06/05 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
matplotlib给子图添加图例的方法
2018/08/03 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
python3发送request请求及查看返回结果实例
2020/04/30 Python
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
自荐信格式的六要素
2013/09/21 职场文书
最新党员思想汇报
2014/01/01 职场文书
幼儿园老师寄语
2014/04/03 职场文书
幼儿园新年寄语
2014/04/03 职场文书
大足石刻导游词
2015/02/02 职场文书
独生子女证明范本
2015/06/19 职场文书
聘任合同书
2015/09/21 职场文书