使用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不规范的日期字符串处理类
Jun 10 Python
Python字符串和文件操作常用函数分析
Apr 08 Python
Python备份目录及目录下的全部内容的实现方法
Jun 12 Python
python利用lxml读写xml格式的文件
Aug 10 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
Jul 04 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
Python SQLAlchemy入门教程(基本用法)
Nov 11 Python
从0到1使用python开发一个半自动答题小程序的实现
May 12 Python
一文带你了解Python 四种常见基础爬虫方法介绍
Dec 04 Python
python和opencv构建运动检测器的实现
Mar 03 Python
从np.random.normal()到正态分布的拟合操作
Jun 02 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中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
PHP中redis的用法深入解析
2014/02/20 PHP
php防止恶意刷新与刷票的方法
2014/11/21 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
简单实现php上传文件功能
2017/09/21 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
Javascript图片上传前的本地预览实例
2014/06/16 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
js实现拖拽效果
2015/02/12 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
jquery 手势密码插件
2017/03/17 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
json前后端数据交互相关代码
2018/09/19 Javascript
Vue 事件处理操作实例详解
2019/03/05 Javascript
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
2020/08/10 Javascript
解读Django框架中的低层次缓存API
2015/07/24 Python
详解Python编程中包的概念与管理
2015/10/16 Python
Python使用Tkinter实现机器人走迷宫
2018/01/22 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
python学生管理系统的实现
2020/04/05 Python
Java提供了哪些企业应用编程接口
2015/02/13 面试题
售后主管岗位职责
2013/12/08 职场文书
大学生求职计划书
2014/04/30 职场文书
销售经理工作检讨书
2015/02/19 职场文书
中秋节主题班会
2015/08/14 职场文书
初二物理教学反思
2016/02/19 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
Python进行区间取值案例讲解
2021/08/02 Python
MySQL 数据库范式化设计理论
2022/04/22 MySQL