使用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判断端口是否打开的实现代码
Feb 10 Python
浅谈django中的认证与登录
Oct 31 Python
简单了解OpenCV是个什么东西
Nov 10 Python
用Python3创建httpServer的简单方法
Jun 04 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
Oct 29 Python
超简单使用Python换脸实例
Mar 27 Python
python字典改变value值方法总结
Jun 21 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
python模块和包的应用BASE_PATH使用解析
Dec 14 Python
python生成大写32位uuid代码
Mar 03 Python
Python实现对adb命令封装
Mar 06 Python
python自动化发送邮件实例讲解
Jan 04 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新手上路(八)
2006/10/09 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
在PHP中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
2018/11/10 PHP
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
javascript弹出层输入框(示例代码)
2013/12/11 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
Bootstrap导航条学习使用(一)
2017/02/08 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
2018/09/27 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
Python MySQLdb Linux下安装笔记
2015/05/09 Python
Python中的推导式使用详解
2015/06/03 Python
Python 爬虫图片简单实现
2017/06/01 Python
Python pandas用法最全整理
2019/08/04 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
html5 音乐播放器 audio 标签使用概述
2013/07/15 HTML / CSS
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
万户网络JAVA程序员岗位招聘笔试试卷
2013/01/08 面试题
通信工程专业毕业生推荐信
2013/12/25 职场文书
党支部公开承诺书
2014/03/28 职场文书
企业宣传标语
2014/06/09 职场文书
学术会议通知范文
2015/04/15 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
奖学金申请书(范文)
2019/08/14 职场文书