Python FTP
今天,我们将学习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.')