使用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抓取豆瓣图片并自动保存示例学习
Jan 10 Python
从Python的源码来解析Python下的freeblock
May 11 Python
Python中的rfind()方法使用详解
May 19 Python
Python基于pillow判断图片完整性的方法
Sep 18 Python
Python实现一个简单的验证码程序
Nov 03 Python
Python中elasticsearch插入和更新数据的实现方法
Apr 01 Python
python 实现UTC时间加减的方法
Dec 31 Python
详解opencv Python特征检测及K-最近邻匹配
Jan 21 Python
python读取有密码的zip压缩文件实例
Feb 08 Python
Python函数和模块的使用总结
May 20 Python
使用python求斐波那契数列中第n个数的值示例代码
Jul 26 Python
python如何读取和存储dict()与.json格式文件
Jun 25 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设计模式 php实现原型模式(prototype)
2015/12/07 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
PHP钩子实现方法解析
2019/05/21 PHP
做网页的一些技巧(续)
2007/02/01 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
js控制淡入淡出示例代码
2013/11/12 Javascript
jquery对元素拖动排序示例
2014/01/16 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
jQuery EasyUI Draggable拖动组件
2017/03/01 Javascript
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
JS中精巧的自动柯里化实现方法
2017/12/12 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
简述vue路由打开一个新的窗口的方法
2018/11/29 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
Python Subprocess模块原理及实例
2019/08/26 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
2020/02/03 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
2021/01/12 Python
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
彪马法国官网:PUMA法国
2019/12/15 全球购物
物理研修随笔感言
2014/02/14 职场文书
我的长生果教学反思
2014/04/28 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
2015年大学生工作总结
2015/04/21 职场文书
歌剧魅影观后感
2015/06/05 职场文书
Python入门之使用pandas分析excel数据
2021/05/12 Python