Python FTP

时间:2020-02-23 14:42:43  来源:igfitidea点击:

今天,我们将学习python ftp操作。
FTP是文件传输协议的缩写。
就像听起来一样,该协议用于在网络上从源计算机到目标计算机传输文件。

在python ftp模块的这篇文章中,我们将看到如何连接到FTP服务器,上传和下载文件等等。
让我们开始吧。

Python FTP

使用Python,ftplib模块提供了我们可能需要通过FTP协议执行操作的所有功能。
让我们通过简单的连接尝试开始本程序。

使用login()函数连接到FTP服务器

我们将从建立与FTP服务器的连接开始。
我们将使用可供使用的公用服务器" ftp.cse.buffalo.edu"。
随意选择任何服务器,只需确保选择正确的服务器,否则将遇到连接错误。

我们将编写一个简单的脚本来连接到所述服务器:

from ftplib import FTP

# Host to connect to
host = 'ftp.cse.buffalo.edu'

# Make an Python FTP object and anonymously login
ftp = FTP(host)
print(ftp.login())

看看我们如何在没有用户名和密码的情况下登录?仅少数服务器支持该功能。
让我们看一下输出:在此示例中,我们从名为FTP的完整模块中导入单个类开始。
我们使用其对象连接到主机并匿名登录到服务器。
当然,我们没有通过端口进行连接。
这意味着,就像其他任何请求一样,它将到达服务器的默认端口。
要更改此设置,请同时指定连接端口:

from ftplib import FTP

# Host to connect to
host = 'ftp.cse.buffalo.edu'
port = 8099

# Make an FTP object and anonymously login
ftp = FTP(host, port)
print(ftp.login())

请注意,您要连接的端口实际上支持传入的FTP连接。

使用getwelcome()函数感到欢迎

服务器可以通过返回一条消息使您感到满意。
可以使用getwelcome()函数获取此消息。
易于使用,下面举个例子:

from ftplib import FTP

# Host to connect to
host = 'ftp.cse.buffalo.edu'

# Make an FTP object and anonymously login
ftp = FTP(host)
print(ftp.login())
print(ftp.getwelcome())

该脚本的输出将仅显示一条简单的消息,可以是任何内容:

使用pwd()函数显示目录

我们可以获得当前连接所在的服务器当前工作目录的路径:

from ftplib import FTP

host = 'ftp.cse.buffalo.edu'
ftp = FTP(host)
ftp.login()

ftp.cwd('mirror')
print(ftp.pwd())

该脚本的输出将仅显示当前的工作目录:

使用retrlines()函数访问目录

现在,就像开放的SSH shell一样,我们可以使用ftplib访问服务器上的目录,进行浏览并根据需要进行更改。

from ftplib import FTP

# Host to connect to
host = 'ftp.cse.buffalo.edu'

# Make an FTP object and anonymously login
ftp = FTP(host)
print(ftp.login())

# List directories in current path
print(ftp.retrlines('LIST'))

看最后一行,我们使用retrlines(...)函数列出当前目录。

使用cwd()函数更改目录

在上面的示例中,我们列出了脚本当前正在访问的目录。
要添加,我们可以很容易地看到当前目录:

from ftplib import FTP

# Host to connect to
host = 'ftp.cse.buffalo.edu'

# Make an FTP object and anonymously login
ftp = FTP(host)
print(ftp.login())

# List directories in current path
print(ftp.retrlines('LIST'))

# Change into one of the sub-directories
ftp.cwd('mirror')
print(ftp.retrlines('LIST'))

其中我们将切换到先前运行中注意到的子目录之一,并得到以下结果:传递的LIST属性只是将当前目录中的文件和文件夹连同其信息一起拉出,然后打印。

使用sendcmd()函数将命令发送到服务器

使用sendcmd()函数,我们可以向服务器发送一个简单的String命令并获取String响应。
例如,我们将发送一个命令STAT,它可以检查服务器的状态:

from ftplib import FTP

host = 'ftp.cse.buffalo.edu'
ftp = FTP(host)
print(ftp.login())

# Check server status
print(ftp.sendcmd('STAT'))

运行此脚本时,我们会在自己的控制台上看到完整的输出:

使用retrbinary()函数下载文件

使用ftpliob模块,我们甚至可以在本地下载文件。
值得注意的是,您必须对服务器具有正确的访问权限,并且目录和文件名以及确切的路径应该是已知的。

我们将只访问服务器上的文件并在本地下载:

from ftplib import FTP

host = 'ftp.cse.buffalo.edu'
ftp = FTP(host)
ftp.login()

ftp.cwd('CSE421')
print(ftp.retrlines('LIST'))

out = '/Users/shubham/README.txt'
with open(out, 'wb') as f:
  ftp.retrbinary('RETR ' + 'README.txt', f.write)

我在两者之间添加了一些打印语句,以使输出更加清晰。
现在运行该程序:这是已下载的文件:请注意,在运行此代码之前,您需要根据本地计算机路径修改文件下载的位置。

使用close()函数关闭连接

完成所有需要完成的任务后,我们应该关闭ftp连接:

from ftplib import FTP

host = 'ftp.cse.buffalo.edu'
ftp = FTP(host)
ftp.login()

ftp.cwd('mirror')
print(ftp.pwd())

ftp.close()
print('Connection closed.')