一、介绍

官方文档:https://docs.python.org/3/library/ftplib.html
FTP(File Transfer Protocol)是一种网络传输协议,在大部分的操作系统上都有客户端的FTP和服务端的FTP服务,服务端的FTP可以让私有(private)用户和匿名(anonymous)用户使用。
私有的服务器端FTP只允许系统用户进行连接,匿名的服务器端FTP不需账号即可连接网络传输文件。
ps:使用匿名的服务器端FTP会产生安全性的问题。
FTP提供一个控制端口与数据端口,在服务器端与客户端之间的数据传输使用独立的socket,以避免司机的问题。

class ftplib.FTP(host ='',user ='',passwd ='',acct ='',timeout = None,source_address = None,*,encoding ='utf-8' )
host是主机名称,user是用户账号,passwd是用户密码
可选的timeout 参数以秒为单位指定用于阻止诸如连接尝试之类的操作的超时(如果未指定,将使用全局默认超时设置)
source_address是一个元组,套接字在连接之前绑定为其源地址。该编码参数指定的目录和文件名的编码

二、FTP对象

FTP对象的方法一种用于处理文本文件,另一种用于二进制文件。

方法 说明
FTP.set_debuglevel(level) 设置实例的调试级别,控制打印的调试输出的数量
默认值为0,不产生调试输出。
为1的值产生中等数量的调试输出,通常每个请求一行
大于2或等于的值将产生最大的调试输出量,记录在控制连接上发送和接收的每一行
FTP.connect(host=’’, port=0, timeout=None, source_address=None) 连接到给定的主机和端口
默认端口号是21
FTP.getwelcome() 返回服务器发送的欢迎消息以回复初始连接
FTP.login(user=’anonymous’, passwd=’’, acct=’’) 以给定用户身份登录
FTP.abort() 中止正在进行的文件传输
ps:不是总有效
FTP.sendcmd(cmd) 将简单的命令字符串发送到服务器并返回响应字符串
FTP.voidcmd(cmd) 将简单的命令字符串发送到服务器并处理响应。如果收到与成功相对应的响应代码(范围在200-299之间的代码),则不返回任何内容
FTP.retrbinary(cmd,callback,blocksize = 8192,rest = None ) 以二进制传输模式检索文件
接收服务器上文件并写入本地文件
FTP.storbinary(cmd,fp,blocksize = 8192,callback = None,rest = None ) 以二进制传输模式存储文件
上传目标文件
FTP.retrlines(cmd,callback = None ) 初始化时,以encoding参数指定的编码检索文件或目录列表
FTP.nlst(参数[,… ] ) 返回NLST命令返回的文件名列表
FTP.dir(参数[,… ] ) 生成LIST命令返回的目录列表,并将其打印到标准输出
FTP.rename(fromname,toname ) 将服务器上的文件fromname重命名为toname
FTP.delete(filename) 从服务器中删除名为filename的文件
FTP.cwd(路径名) 在服务器上设置当前目录
FTP.mkd(路径名) 在服务器上创建一个新目录
FTP.pwd() 返回服务器上当前目录的路径名
FTP.rmd(目录名) 在服务器上删除名为dirname的目录
FTP.size(filename) 请求服务器上名为filename的文件的大小
FTP.quit() 将QUIT命令发送到服务器并关闭连接
FTP.close() 单方面关闭连接

三、FTP_TLS对象

FTP_TLS类继承自FTP,定义了以下其他对象:

对象 说明
FTP_TLS.ssl_version 使用的SSL版本
FTP_TLS.auth() 根据ssl_version属性中指定的内容,使用TLS或SSL设置安全控制连接
FTP_TLS.ccc() 将控制通道还原为纯文本
FTP_TLS.prot_p() 设置安全数据连接
FTP_TLS.prot_c() 设置明文数据连接

四、FTP上传文件

  1. from ftplib import FTP
  2. ftp = FTP()
  3. timeout = 30
  4. port = 21
  5. #连接FTP服务器
  6. ftp.connect('192.168.1.106', port,timeout)
  7. #登录FTP服务器
  8. ftp.login("admins","123456")
  9. #获得欢迎信息
  10. print (ftp.getwelcome())
  11. #设置ftp路径
  12. ftp.cwd('file/test')
  13. #获得目录列表
  14. list = ftp.nlst()
  15. #打印文件名字
  16. for name in list:
  17. print(name)
  18. #文件保存路径
  19. path = "E:\\pythonstduy\\"+name
  20. #打开要保存的文件
  21. f = open(path,"wb")
  22. #保存ftp文件
  23. filename = 'RETR'+name
  24. #保存ftp上的我呢见
  25. ftp.retrbinary(filename,f.write)
  26. #上传ftp文件
  27. ftp.storbinary("STOR"+filename,open(path,"rb"))
  28. #退出ftp服务器
  29. ftp.quit()