Python - FTP

  • 简述

    FTP或文件传输协议是众所周知的网络协议,用于在网络中的计算机之间传输文件。它是在客户端服务器架构上创建的,可以与用户身份验证一起使用。它也可以在没有身份验证的情况下使用,但这会不太安全。FTP 连接维护当前工作目录和其他标志,并且每次传输都需要一个辅助连接,通过该辅助连接传输数据。大多数常见的网络浏览器都可以检索托管在 FTP 服务器上的文件。
  • FTP类中的方法

    在python中,我们使用模块ftplib它具有以下列出文件所需的方法,因为我们将传输文件。
    方法 描述
    密码 () 当前工作目录。
    cwd() 将当前工作目录更改为路径。
    目录([路径[,...[,cb]]) 显示路径的目录列表。可选的回调 cb 传递给 retrlines()。
    storlines (cmd, f) 使用给定的 FTP cmd 上传文本文件 - 例如,STOR 文件名。
    storbinary (cmd, f [, bs = 8192]) 类似于 storlines() 但用于二进制文件。
    删除(路径) 删除位于路径的远程文件。
    mkd(目录) 创建远程目录。
    异常 ftplib.error_temp 收到表示临时错误的错误代码(400-499 范围内的响应代码)时引发异常。
    异常 ftplib.error_perm 收到表示永久错误的错误代码(500-599 范围内的响应代码)时引发异常。
    连接(主机[,端口[,超时]]) 连接到给定的主机和端口。默认端口号为 21,由 FTP 协议指定。
    放弃() 关闭连接并退出。
    以下是上述一些方法的示例。
  • 列出文件

    下面的示例使用匿名登录到 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 存在于启动连接的本地系统中。