Python网络编程 FTP
FTP 或文件传输协议是一个著名的网络协议,用于在网络中的计算机之间传输文件。 它是在客户服务器架构上创建的,可以与用户认证一起使用。它也可以在没有认证的情况下使用,但这将是不太安全的。FTP连接,它保持一个当前工作目录和其他标志,每次传输都需要一个二级连接,数据通过该连接传输。大多数常见的网络浏览器可以检索托管在FTP服务器上的文件。
FTP类中的方法
在Python中,我们使用 ftplib 模块,它有以下所需的方法来列出文件,因为我们要传输文件。
方法 | 方法描述 |
---|---|
pwd() | 当前工作目录。 |
cwd() | 将当前工作目录改为路径。 |
dir([path[,…[,cb]]) | 显示路径的目录列表。可选的回调cb传递给retrlines()。 |
storlines(cmd, f) | 使用给定的 FTP cmd 上传文本文件 – 例如,STOR 文件名。 |
storinary(cmd,f[, bs=8192]) | 类似于storlines(),但用于二进制文件。 |
delete(path) | 删除位于路径的远程文件。 |
mkd(directory) | 创建远程目录。 |
exception ftplib.error_temp | 当收到表示临时错误的错误代码(响应代码在400-499范围内)时引发的异常。 |
exception ftplib.error_perm | 当收到表示永久错误的错误代码(响应代码在500-599范围内)时产生的异常。 |
connect(host[, port[, timeout]] ) | 连接到给定的主机和端口。默认端口号是21,由FTP协议指定。 |
quit() | 关闭连接并退出。 |
下面是上述一些方法的例子。
列出文件
下面的例子使用匿名登录到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
When we run the above program, we get the following output −
- 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
改变目录
下面的程序使用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
When we run the above program, we get the following output −
- 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
取回文件
在得到如上所示的文件列表后,我们可以使用 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文件存在于启动连接的本地系统中。