fitlib模块定义了FTP类和一些相关操作。ftplib.FTP类实现FTP协议的客户端,可以使用它来编写执行各种FTP作业的Python程序。
详细说明请查看官方文档
简单的FTP文件下载小例子
官方小例子
import ftplib
ftp = ftplib.FTP('ftp.cwi.nl') # connect to host, default port
ftp.login() # user anonymous, passwd anonymous@
ftp.retrlines('LIST') # list directory contents
ftp.retrbinary('RETR README', open('README', 'wb').write)
'226 Transfer complete.'
ftp.quit()
简单介绍
新建实例
简单实例创建
ftplib.FTP([host[, user[, passwd[, acct[, timeout]]]]])
创建并返回FTP实例,如果传入host自动调用connect(host)方法,如果传入user自动调用login(user,passwd,acct)方法,如果设置timeout使用自定义阻塞时间否则使用系统默认的全局阻塞时间。
import ftplib
ftp = ftplib.FTP('127.0.0.1','test','123456',10)
实例创建
创建新的实例使用connect和login方法
import ftplib
ftp = ftplib.FTP()
FTP.connect(host[, port[, timeout]])
尝试连接FTP服务器,默认端口 21
每个FTP实例只能调用依次,而且必须在其他方法之前调用
ftp.connect('127.0.0.1',21,10)
FTP.login([user[, passwd[, acct]]])
尝试使用用户名密码链接
ftp.login('test','123456')
实例设置
FTP.set_debuglevel(level)
设置实例的调试级别
默认值0不生成调试输出,值为1每个请求一行,值为2或更高会产生大量的调试输出
ftp.set_debuglevel(1)
FTP.encoding
设置字符集防止乱码
ftp.encoding = 'gbk'
FTP.set_pasv(boolean)
设置是否开启主动FTP模式,默认值为True
ftp.set_pasv(True)
常用方法
FTP.getwelcome()
返回服务器的欢迎消息
print(ftp.getwelcome())
FTP.abort()
中断进行中的文件传输(并不总是起作用)
FTP.sendcmd(command)
向服务器发送一条简单的FTP命令,返回响应结果
print(ftp.sendcmd('list'))
#结果
*cmd* 'list'
*resp* '150 Opening ASCII mode data connection for /bin/ls.'
150 Opening ASCII mode data connection for /bin/ls.
FTP.voidcmd(command)
和FTP.sendcmd(command)功能相似,但返回代码不在200-299之间时抛出异常
ftp.voidcmd('list')
#结果
ftplib.error_reply: 150 Opening ASCII mode data connection for /bin/ls.
FTP.retrbinary(command, callback[, maxblocksize[, rest]])
以二进制模式检索文件
ftp.retrbinary('retr test.txt',open('test.txt','wb').write,8192)
#结果
*cmd* 'retr test.txt'
*resp* '150 Opening BINARY mode data connection for test.txt (337 bytes).'
*resp* '226 Transfer complete.'
FTP.retrlines(command[, callback])
以ASC||码模式检索文件
ftp.retrlines('cwd',print('CWD'))
#结果
*cmd* 'cwd'
*resp* '250 Directory changed to /'
FTP.storbinary(command, file[, blocksize, callback])
以二进制模式上传文件
ftp.storbinary('stor test.txt', open('test.txt','rb'), 8192,print('test'))
#结果
*cmd* 'stor test.txt'
*resp* '150 Opening BINARY mode data connection for test.txt.'
*resp* '226 Transfer complete.'
FTP.storlines(command, file[, callback])
以ASC||模式上传文件
ftp.storlines('stor test1.txt', open('test.txt','rb'),print('test1'))
#结果
*cmd* 'stor test1.txt'
*resp* '150 Opening ASCII mode data connection for test1.txt.'
*resp* '226 Transfer complete.'
FTP.transfercmd(cmd[, rest])
开启文件传输并返回套接字
print(ftp.transfercmd('list'))
#结果
*cmd* 'list'
*resp* '150 Opening ASCII mode data connection for /bin/ls.'
<socket.socket fd=352, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 54683), raddr=('127.0.0.1', 3880)>
FTP.ntransfercmd(cmd[, rest])
与FTP.transfercmd(cmd[, rest]),但返回套接字,数据量的元祖
print(ftp.ntransfercmd('list'))
*cmd* 'list'
*resp* '150 Opening ASCII mode data connection for /bin/ls.'
(<socket.socket fd=720, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 54683), raddr=('127.0.0.1', 3880)>, None)
FTP.nlst(argument[, …])
返回文件列表
print(ftp.nlst())
#结果
['test.txt', 'test1.txt',...]
FTP.dir(argument[, …])
返回目录列表
print(ftp.dir())
#结果
*cmd* 'LIST'
*resp* '150 Opening ASCII mode data connection for /bin/ls.'
drw-rw-rw- 1 user group 0 Nov 20 11:14 .
drw-rw-rw- 1 user group 0 Nov 20 11:14 ..
...
*resp* '226 Transfer complete.'
None
FTP.rename(fromname, toname)
修改服务器文件名称
ftp.rename('test.txt','test0.txt')
#结果
*cmd* 'RNTO test0.txt'
*resp* '250 RNTO command successful.'
FTP.delete(filename)
删除服务器文件
ftp.delete('test0.txt')
#结果
*cmd* 'DELE test0.txt'
*resp* '250 DELE command successful.'
FTP.cwd(pathname)
设置服务器当前路径
ftp.cwd('.')
#结果
*cmd* 'CWD .'
*resp* '250 Directory changed to /'
FTP.mkd(pathname)
创建新目录
ftp.mkd('Data')
#结果
*cmd* 'MKD Data'
*resp* '257 "/Data" directory created.'
FTP.pwd()
返回当前目录的路径
ftp.pwd()
#结果
*cmd* 'PWD'
*resp* '257 "/" is current directory.'
FTP.rmd(dirname)
删除文件夹
ftp.rmd('Data')
#结果
*cmd* 'RMD Data'
*resp* '250 RMD command successful.'
FTP.size(filename)
返回文件大小
ftp.size('test1.txt')
#结果
*cmd* 'SIZE Atest1.py'
*resp* '213 240'
FTP.quit()
正常退出
ftp.quit()
#结果
*cmd* 'QUIT'
*resp* '221 Goodbye!'
FTP.close()
强行关闭连接
ftp.close()