# Python 中的 FTP 客户端

> 原文： [https://pythonspot.com/ftp-client-in-python/](https://pythonspot.com/ftp-client-in-python/)

本文将从客户端的角度向您展示如何在 Python 中使用文件传输协议（FTP）。 我们使用`ftplib`，这是一个实现 FTP 协议的库。 使用 FTP，我们可以通过函数调用创建和访问远程文件。

## 目录列表

我们可以使用这个小片段列出根目录：

```py
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

```

这将输出目录内容。 以简单的控制台样式输出。 如果要显示特定目录，则必须在连接`ftp.cwd('/')`函数后更改目录，其中参数是您要更改的目录。

```py
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

```

## 下载文件

要下载文件，我们使用`retrbinary()`函数。 下面的例子：

```py
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()

```

## 上传文件

我们可以使用`storlines()`命令上传文件。 这将在主目录中上传文件`README.nluug`。 如果要在另一个目录中上传，请与`cwd()`函数结合使用。

```py
import ftplib
import os

def upload(ftp, file):
    ext = os.path.splitext(file)[1]
    if ext in (".txt", ".htm", ".html"):
        ftp.storlines("STOR " + file, open(file))
    else:
        ftp.storbinary("STOR " + file, open(file, "rb"), 1024)

ftp = ftplib.FTP("127.0.0.1")
ftp.login("username", "password")

upload(ftp, "README.nluug")

```

## 其他函数

有关其他函数，请参考[官方库文档](https://docs.python.org/3/library/ftplib.html#)。