📜  Python -FTP

📅  最后修改于: 2020-11-06 06:34:28             🧑  作者: Mango


FTP或文件传输协议是一种众所周知的网络协议,用于在网络中的计算机之间传输文件。它是在客户端服务器体系结构上创建的,可以与用户身份验证一起使用。也可以在不进行身份验证的情况下使用它,但这将降低安全性。 FTP连接保持当前的工作目录和其他标志,并且每次传输都需要一个辅助连接,通过该连接可以传输数据。大多数常见的Web浏览器都可以检索FTP服务器上托管的文件。

FTP类中的方法

在Python,我们使用ftplib模块,该模块具有以下必需的方法来列出文件,因为我们将传输文件。

Method Description
pwd() Current working directory.
cwd() Change current working directory to path.
dir([path[,…[,cb]]) Displays directory listing of path. Optional call-back cb passed to retrlines().
storlines(cmd, f) Uploads text file using given FTP cmd – for example, STOR file name.
storbinary(cmd,f[, bs=8192]) Similar to storlines() but is used for binary files.
delete(path) Deletes remote file located at path.
mkd(directory) Creates remote directory.
exception ftplib.error_temp Exception raised when an error code signifying a temporary error (response
codes in the range 400–499) is received..
exception ftplib.error_perm Exception raised when an error code signifying a permanent error (response
codes in the range 500–599) is received..
connect(host[, port[, timeout]]) Connects to the given host and port. The default port number is 21, as
specified by the FTP protocol..
quit() Closes connection and quits.

以下是上述某些方法的示例。

列出文件

下面的示例使用匿名登录到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

更改目录

下面的程序使用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


提取文件

如上所示获取文件列表后,我们可以使用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存在于启动连接的本地系统中。