如何在Python中使用FTP

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

概述


本文向您展示如何在ftplib模块的帮助下在Python中使用FTP。

Ftplib

Python中的ftplib模块允许写Python程序自动化一些FTP任务,你可以很容易的连接到FTP服务器上取得文件,并且在本地处理。为了在Python中使用ftplib模块,首先你要把它导入(import)你的脚本。

打开一个连接

为了在FTP服务器上“打开”一个连接,你必须创建一个对象。一旦连接建立(打开),你就可以使用ftplib模块中的方法了。很多方法都有两种分类:一种来处理文本文件,另一种来处理二进制文件。你可以很容易的浏览目录结构,管理和下载文件。

如何使用?

程序首先连接到FTP服务器(ftp.cwi.nl)并且接着使用LIST()方法列出FTP服务器根目录下的文件和目录结构。
from ftplib import FTPftp = FTP('ftp.cwi.nl')   # connect to host, default portftp.login()               # user anonymous, passwd anonymous@ftp.retrlines('LIST')     # list directory contents
第二个程序使用电子邮件为anonymous@sunet.se的“anonymous”用户打开“ftp.sunet.se”的连接。接着使用dir()方法列出FTP服务器上的文件和目录。dir()方法的输出被存储到“files”变量中。接着用print函数在屏幕上列出有哪些文件。如果我想切换目录,我就用ftp.cwd(path)来完成。关闭FTP连接,使用quit()方法。
import ftplibftp = ftplib.FTP('ftp.sunet.se', 'anonymous', 'anonymous@sunet.se')print "File List: "files = ftp.dir()print filesftp.cwd("/pub/unix") #changing to /pub/unix

常见FTP方法

FTP.connect(host[, port[, timeout]])

使用指定的host和port来连接。FTP协议规范的默认端口是21。很少情况需要指定一个其它的端口号。该方法在每一个实例中调用一次。当创建时实例已经指定了host,就不该调用该方法。一个连接建立后,所有别的方法才能使用。可选的timeout参数指定了一个尝试连接的时候以秒来表示的超时。如果没有timeout参数,将使用默认的是超时设置。


FTP.getwelcome()

作为初始连接的回应,返回服务器发送的欢迎信息。这个信息包含了一些免责声明或者一些与用户相关的帮助信息。


FTP.login([user[, passwd[, acct]]])

作为指定用户登录。passed和acct参数是可选的,默认是空字符串。如过没有指定用户,默认是“anonymous”。如果用户数是“anonymous”,默认密码是“anonymous@”在一个连接已经建立后,对于每一个实例来说该函数只能调用一次。实例创建时,如果主机和用户已经指定,就不应该调用该函数了。绝大多数命令在客户登陆后才能调用。acct参数提供了“记账信息”,没有几个系统实现这个参数。


FTP.retrbinary(command, callback[, maxblocksize[, rest]])

使用二进制传输模式来得到一个文件。命令应该是一个合适的RETR命令:“RETR filename”callback函数在收到每一个数据块后会被调用,该函数使用一个string类型的接收到的数据块作为参数。可选的maxblocksize参数指定了为做实际数据传输创建的底层socker对象读取的最大块的大小。已经选择了合理的默认值。rest和在transfercmd()中表示的东西是一样的。


FTP.retrlines(command[, callback])

返回一个使用ASCII传输模式列出的文件或者目录。命令应该是个合适的RETR命令,或者是一个如LIST,NLST或者MLSD的命令。LIST返回一个文件列表和关于这些文件的信息。NLST返回一个文件名的列表。在一些服务器上,MLSD返回一个机器可读的文件列表和关于这些文件的信息。callback函数在得到每一行数据的时候调用,并且被传入一个移除了CRLF的接收行作为参数。默认情况下callback将打印行到sys.stdout。


FTP.dir(argument[, ...])

生成一个就像LIST命令返回的一样的目录列表,并且打印到标准输出上。可选参数是一个要列出信息的目录(默认是服务器的当前目录)。多个参数可以被用来传入非标准的选项给LIST命令。如果最后一个参数是个函数,该函数就会被用来作为retrlines()的回调函数;默认打印到sys.stdout。函数返回None。


FTP.delete(filename)

从服务器上删除名字为filename的文件。如果删除成功,返回响应文字,否则生成一个权限错误(error_perm)或者别的错误(error_reply)。


FTP.cwd(pathname)

在服务器上设置当前目录。


FTP.mkd(pathname)

在服务器上创建新的目录。


FTP.pwd()

返回服务器上当前目录的路径名。


FTP.quit()

向服务器发送一个QUIT命令并且关闭连接。这是关闭连接的一个“礼貌的”方式,但是如果服务器使用一个错误来响应QUIT命令的话,就会搞出一个异常。这意味着调用close()方法后会使FTP实例无效,接下来的调用也就没用了。


FTP.close()

单方面关闭连接。这个方法不应该应用到一个已经关闭的连接(比如一个已经成功地调用quit()的连接)上。调用之后,FTP实例就不应该再使用了。当调用close()或者quit()后,你就不能再次通过调用别的login()方法来再次打开连接了。


如果需要更多地信息,请参考官方的Python文档


英文原文:http://www.pythonforbeginners.com/code-snippets-source-code/how-to-use-ftp-in-python/
译者:pyBean
 

2月15日11:00到13:00网站停机维护,13:00前恢复