SFTP,全称 SSH 文件传输协议,又称 安全文件传输协议,是一种网络协议,允许我们通过可靠的数据流访问文件、传输文件和管理文件。该程序在一个安全通道上运行,就像SSH一样,服务器已经验证了客户端,客户端用户的身份对协议是可用的。

如果我们使用像Python这样的编程语言,使用脚本处理SFTP的事务总是可以得到支持。Python提供了 pysftp 模块,使我们可以轻松高效地处理这项技术。

在以下教程中,我们将了解 pysftp 模块及其在Python编程语言中的用法,并附带一些示例。

因此,让我们开始吧。

了解 Python pysftp 模块

Python pysftp 模块是SFTP的一个简单接口。该模块提供高级抽象和基于任务的时间表,以处理SFTP需求。SFTP协议不支持安全性和认证;它期望基本协议来保护它。SFTP最广泛地用作SSH协议第2版的子系统实现,由同一工作组设计。

pysftp 模块作为 Paramiko 的一个包装,具有更受Python影响的接口。Paramiko库是一种出色的Python库,被认为是pysftp的骨干。pysftp 创建的方法是对程序员的生产力的抽象,它封装了与SFTP交互的各种高级功能用例,而不仅仅是编写脚本以遍历目录并调用get和put,涉及不仅仅是 Paramiko,还涉及Python的OSstat模块,并编写测试(互联网上的许多代码片段都是不完整的,不考虑边缘情况)。pysftp 模块提供了一个完整的库来处理这三个方面,使我们能够专注于其他主要任务。

现在,让我们安装Python的 SFTP 模块或 pysftp

如何安装pysftp模块?

pysftp 接口不暴露 Paramiko 的大部分功能;然而,它抽象了几乎所有的功能使用一个单一的方法。相比之下,pysftp 模块在 Paramiko 之上实现了更高级的功能,尤其是递归文件传输。

我们可以使用pip安装 pysftp 模块,使用以下命令:

语法:

$ pip install pysftp  
# or  
$ python3 -m pip install pysftp  

该模块将按照Python和pip的版本安装在系统中。

验证安装

为了检查模块是否已正确安装在系统中,我们可以尝试导入模块并执行程序。

安装完成后,创建一个新的Python文件,然后在其中输入以下语法。

示例:

# importing the required module  
import pysftp  

现在,保存文件,并在命令提示符中使用以下命令运行文件。

语法:

$ python <file-name>.py  

如果程序运行而不引发任何导入错误,那么模块已正确安装。否则,建议重新安装模块并查阅其官方文档。

使用pysftp访问SFTP服务器

我们可以使用 pysftp 模块在Python中列出目录的内容。为了实现这个目标,我们需要主机名、用户名和密码。

然后,我们必须使用 chdircwd 方法切换目录,并将第一个参数作为远程目录提供。

让我们考虑以下相同的示例。

示例:

# importing the required module  
import pysftp  
# defining the host, username, and password  
my_Hostname = "welcomeblog.com"  
my_Username = "root"  
my_Password = "root"  
# using the python with statement  
with pysftp.Connection(  
    host = my_Hostname,  
    username = my_Username,  
    password = my_Password  
    ) as sftp:  
    print("Connection succesfully established ... ")  
    # Switching to a remote directory  
    sftp.cwd('/var/www/vhosts/')  
    # Obtaining structure of the remote directory '/var/www/vhosts'  
    dir_struct = sftp.listdir_attr()  
    # Printing data  
    for attr in dir_struct:  
        print(attr.filename, attr)  
# connection closed automatically at the end of the with statement  

解释:

以上代码片段是一个不存在的虚构服务器。然而,在现实生活中,我们必须使用环境变量来获取原始凭据,而不是将所有凭据存储在单独的文件中。建议将它放在环境变量文件中,例如 .env 文件。

现在,让我们理解上面的代码。上面的代码片段对于任何人都是相同的,因为我们必须提供凭据,然后程序将开始工作。

首先,我们导入了 pysftp 模块,然后提供了变量来存储主机名、用户名和密码的值。然后,我们使用Python的 with 语句来提供主机名、用户名和密码以打开与远程服务器的安全连接。如果成功,我们将切换到远程目录,获取列表并逐个在控制台中打印出来。

列表是无序的,不包括唯一的条目“.” 和“..”。返回的 SFTPAttributes 对象将具有额外的字段:longname,它可能包含以UNIX格式表示文件属性的格式化字符串。字符串的内容将依赖于SFTP服务器。

使用pysftp在Python中上传文件

我们可以使用 pysftpsftp.put() 函数将文件上传到远程服务器的SFTP。put 方法期望第一个参数是要上传的文件的相对或绝对本地路径,第二个参数是要上传文件的远程路径。

让我们考虑以下代码片段,以更好地理解。

示例:

# importing the required module  
import pysftp  
# defining the host, username, and password  
my_Hostname = "welcomeblog.com"  
my_Username = "root"  
my_Password = "root"  
# using the python with statement  
with pysftp.Connection(  
    host = my_Hostname,  
    username = my_Username,  
    password = my_Password  
    ) as sftp:  
    print("Connection succesfully established ... ")  
    # Defining a file that we want to upload from the local directorty  
    # or absolute "/Users/krunal/Desktop/code/pyt/app.txt"  
    local_File_Path = './app.txt'  
    # Defining the remote path where the file will be uploaded  
    remote_File_Path = '/var/backups/app.txt'  
    # Using the put method to upload a file  
    sftp.put(local_File_Path, remote_File_Path)  
# connection closed automatically at the end of the with statement  

解释:

在上面的代码片段中,我们建立了一个安全连接,然后定义了两个文件路径 - local_File_Pathremote_File_Path

  1. local_File_Path: 这个文件路径是本地文件的路径。
  2. remote_File_Path: 这个文件路径是要上传文件的远程路径。

然后,我们使用 sftp.put() 函数来将文件上传到服务器。

使用pysftp在Python中下载远程文件

在前面的部分中,我们已经讨论了使用 pysftp 上传文件的方法。现在让我们了解如何下载文件的方法。

我们可以通过打开与 sftp 实例的连接,使用 get 方法来从服务器下载远程文件,并期望要下载的远程文件的路径作为第一个参数。第二个参数是我们应该存储文件的本地路径。

让我们考虑以下示例来说明这一点。

示例:

# importing the required module  
import pysftp  
# defining the host, username, and password  
my_Hostname = "welcomeblog.com"  
my_Username = "root"  
my_Password = "root"  
# using the python with statement  
with pysftp.Connection(  
    host = my_Hostname,  
    username = my_Username,  
    password = my_Password)  
    as sftp:  
    print("Connection succesfully established ... ")  
    # Defining the remote path file path  
    remote_File_Path = '/var/backups/app.txt'  
    # Defining a directory in which we have to save the file.  
    # or absolute "/Users/krunal/Desktop/code/pyt/app.txt"  
    local_File_Path = './app.txt'  
    # Using the get method to download a file  
    sftp.get(remote_File_Path, local_File_Path)  
# connection closed automatically at the end of the with statement  

解释:

在上面的代码片段中,我们定义了一个连接,然后定义了两个文件路径 - remote_File_Pathlocal_File_Path

  1. remote_File_Path: 这个文件路径是文件所在的路径。
  2. local_File_Path: 这个文件路径是文件将被下载到的本地路径。

然后,我们使用 sftp.get() 函数来下载文件。

在Python中使用pysftp删除文件

我们可以使用 pysftp 来删除文件,使用 sftp.remove() 函数。remove() 函数期望远程文件的绝对路径作为第一个参数。

让我们考虑以下示例来说明这一点。

示例:

# importing the required module  
import pysftp  
# defining the host, username, and password  
my_Hostname = "welcomeblog.com"  
my_Username = "root"  
my_Password = "root"  
# using the python with statement  
with pysftp.Connection(  
    host = my_Hostname,  
    username = my_Username,  
    password = my_Password)  
    as sftp:  
    print("Connection succesfully established ... ")  
    # Defining the remote path file path  
    remote_File_Path = '/var/backups/app.txt'  
    # Using the get method to download a file  
    sftp.remove(remote_File_Path)  
# connection closed automatically at the end of the with statement 

解释:

在上面的代码片段中,我们建立了一个连接,然后定义了一个 remove_File_Path 变量,其中包含需要删除的文件的路径。

然后,我们使用 sftp.remove() 函数来从远程服务器删除文件。

pysftp 模块有许多功能,我们可以使用它来执行各种操作,例如处理权限等等。也可以参考Python pysftp 模块的官方文档。

标签: Tkinter教程, Tkinter安装, Tkinter库, Tkinter入门, Tkinter学习, Tkinter入门教程, Tkinter, Tkinter进阶, Tkinter进阶教程, Tkinter编程, Tkinter指南Tkinter学习指南