Python笔记 之 ftplib模块简介

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()
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值