文件传输协议(File Transfer Protocol, FTP)早在web流行之前是因特网上进行文件传输和下载软件和源代码的主要手段之一。
FTP要求用户输入用户名和密码才能访问远端FTP服务器,但也允许没有账号的用户匿名登录(需要管理员设置允许匿名登录)。但与登录用户相比,匿名用户只能使用有限的几个FTP命令。
如图所示展示了这个协议:

因特网上的FTP客户端和服务器。客户端与服务器在命令与控制端口通过FTP协议通信,而数据通过数据端口传输。

其工作流程如下:

  1. 客户端连接远程主机上的FTP服务器
  2. 客户端输入用户名和密码(或“anonymous”和电子邮件地址)
  3. 客户端进行各种数据传输和信息查询操作
  4. 客户端从远程FTP退出,结束传输

那么如何使用Python编写FTP客户端程序呢?

在使用Python的支持时,所需要做的是导入ftplib模块,并实例化一个ftplib.FTP类对象。所有的FTp操作(如登录,传输文件和注销等)都要使用这个对象来完成。
下面是一段程序的伪代码:

from ftplib import FTP
f = FTP('some.ftp.server')
f.login('username', 'password')
         ......
f.quit()

ftplib.FTP类的方法

方法 属性
login([user[, passwd[, acct]]]) 登录到FTP服务器,所有参数都是可选的
pwd() 得到当前工作目录
cwd(pathname) 把当前工作目录设置为pathname
dir(argument[, …[,cb]·]) 显示参数目录的内容,可选参数cb是一个回调函数他会被传给retrlines()方法
nlst(argument[, …]) 与dir 类似 但返回一个文件名列表 而不是显示这些文件
retrlines(command[, callback]) 给定FTP命令 用于下载文本文件 可选的会小函数用于处理每一块下载的数据(每块默认为为8k)
retrbinary(command, callback[, maxblocksize[, rest]]) 与上一个类似 但这个指令处理二进制文件
storlines(command, file[, callback]) 给定FTP命令,用于上传文件 要给定一个文件对象file
storbinary(command, file[, blocksize, callback, rest]) 与上一个类似 只是这个处理二进制文件 要给定文件对象 上传块大小默认8k
rename(fromname, toname) 修改文件名
delete(filename) 删除远程文件
mkd(pathname) 创建远程目录
rmd(dirname) 删除远程目录
quit() 关闭链接并断开