一、介绍
官方文档: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上传文件
from ftplib import FTPftp = FTP()timeout = 30port = 21#连接FTP服务器ftp.connect('192.168.1.106', port,timeout)#登录FTP服务器ftp.login("admins","123456")#获得欢迎信息print (ftp.getwelcome())#设置ftp路径ftp.cwd('file/test')#获得目录列表list = ftp.nlst()#打印文件名字for name in list:print(name)#文件保存路径path = "E:\\pythonstduy\\"+name#打开要保存的文件f = open(path,"wb")#保存ftp文件filename = 'RETR'+name#保存ftp上的我呢见ftp.retrbinary(filename,f.write)#上传ftp文件ftp.storbinary("STOR"+filename,open(path,"rb"))#退出ftp服务器ftp.quit()
