使用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 strip()函数 介绍
May 24 Python
Python快速从注释生成文档的方法
Dec 26 Python
利用python实现简单的循环购物车功能示例代码
Jul 05 Python
微信跳一跳python自动代码解读1.0
Jan 12 Python
Python中单例模式总结
Feb 20 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 Python
十分钟搞定pandas(入门教程)
Jun 21 Python
用python做游戏的细节详解
Jun 25 Python
打包PyQt5应用时的注意事项
Feb 14 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
Apr 09 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
python如何获取网络数据
Apr 11 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入门速成(2)
2006/10/09 PHP
PHP5 字符串处理函数大全
2010/03/23 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
jcrop基本参数一览
2013/07/16 Javascript
浏览器的JavaScript引擎的识别方法
2013/10/20 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
2015/09/25 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
2016/12/08 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
八种Vue组件间通讯方式合集(推荐)
2020/08/18 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
ES6 十大特性简介
2020/12/09 Javascript
小程序实现列表倒计时功能
2021/01/29 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
生日主持词
2014/03/20 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
老乡聚会通知
2015/04/23 职场文书
辞职信格式范文
2015/05/13 职场文书
Python+Pillow+Pytesseract实现验证码识别
2022/05/11 Python