Python Network Programming 简明教程
Python - FTP
FTP 或文件传输协议是一种著名的网络协议,用于在网络中的计算机之间传输文件。它是在客户端服务器架构上创建的,可以与用户身份验证一起使用。它也可以在没有身份验证的情况下使用,但那样的安全性会比较低。维护当前工作目录和其他标志的 FTP 连接,并且每次传输都需要通过二级连接,数据才会传输。大多数常见的网络浏览器都可以检索托管在 FTP 服务器上的文件。
The Methods in FTP class
在 python 中,我们使用 ftplib 模块,该模块具有以下所需方法,以便在传输文件时列出文件。
Method |
Description |
pwd() |
Current working directory. |
cwd() |
更改当前工作目录为 path。 |
dir([path[,…[,cb]]) |
显示 path 的目录列表。可选的回调 cb 传递到 retrlines()。 |
storlines(cmd, f) |
使用给定的 FTP 命令上传文本文件 - 例如,STOR 文件名。 |
storbinary(cmd,f[, bs=8192]) |
类似于 storlines(),但用于二进制文件。 |
delete(path) |
删除位于 path 的远程文件。 |
mkd(directory) |
Creates remote directory. |
exception ftplib.error_temp |
在接收表明错误的错误代码时引发异常,表示暂时错误(响应代码在 400–499 范围内)。 |
exception ftplib.error_perm |
当收到表示永久错误的错误代码(响应代码在 500–599 范围内)时,引发异常.. |
connect(host[, port[, timeout]]) |
连接到给定的主机和端口。默认端口号为 21,如 FTP 协议所指定.. |
quit() |
Closes connection and quits. |
以下是以上一些方法的示例。
Listing the Files
下面的示例对 FTP 服务器使用匿名登录并列出当前目录的内容。它通过文件名和目录名进行处理并将它们存储为一个列表。然后打印这些文件和目录。
import ftplib
ftp = ftplib.FTP("ftp.nluug.nl")
ftp.login("anonymous", "ftplib-example-1")
data = []
ftp.dir(data.append)
ftp.quit()
for line in data:
print "-", line
当我们运行以上程序时,我们得到以下输出:
- lrwxrwxrwx 1 0 0 1 Nov 13 2012 ftp -> .
- lrwxrwxrwx 1 0 0 3 Nov 13 2012 mirror -> pub
- drwxr-xr-x 23 0 0 4096 Nov 27 2017 pub
- drwxr-sr-x 88 0 450 4096 May 04 19:30 site
- drwxr-xr-x 9 0 0 4096 Jan 23 2014 vol
Changing the Directory
下面的程序使用 ftplib 模块中可用的 cwd 方法来更改目录,然后获取所需的内容。
import ftplib
ftp = ftplib.FTP("ftp.nluug.nl")
ftp.login("anonymous", "ftplib-example-1")
data = []
ftp.cwd('/pub/') change directory to /pub/
ftp.dir(data.append)
ftp.quit()
for line in data:
print "-", line
当我们运行以上程序时,我们得到以下输出:
- lrwxrwxrwx 1 504 450 14 Nov 02 2007 FreeBSD -> os/BSD/FreeBSD
- lrwxrwxrwx 1 504 450 20 Nov 02 2007 ImageMagick -> graphics/ImageMagick
- lrwxrwxrwx 1 504 450 13 Nov 02 2007 NetBSD -> os/BSD/NetBSD
- lrwxrwxrwx 1 504 450 14 Nov 02 2007 OpenBSD -> os/BSD/OpenBSD
- -rw-rw-r-- 1 504 450 932 Jan 04 2015 README.nluug
- -rw-r--r-- 1 504 450 2023 May 03 2005 WhereToFindWhat.txt
- drwxr-sr-x 2 0 450 4096 Jan 26 2008 av
- drwxrwsr-x 2 0 450 4096 Aug 12 2004 comp
Fetching the Files
在如上所述获取文件列表后,我们可以使用 getfile 方法来获取特定文件。此方法将文件的副本从远程系统移动到发起 FTP 连接的本地系统。
import ftplib
import sys
def getFile(ftp, filename):
try:
ftp.retrbinary("RETR " + filename ,open(filename, 'wb').write)
except:
print "Error"
ftp = ftplib.FTP("ftp.nluug.nl")
ftp.login("anonymous", "ftplib-example-1")
ftp.cwd('/pub/') change directory to /pub/
getFile(ftp,'README.nluug')
ftp.quit()
当我们运行上面的程序时,我们发现文件 README.nlug 存在于发起连接的本地系统中。