Python pysftp模块

Python pysftp模块

SFTP ,简称SSH文件传输协议,也称为安全文件传输协议,它是一种网络协议,允许我们通过任何可靠的数据流访问、传输和管理文件。该程序在一个安全通道上工作,如SSH,服务器已经对客户端进行了身份验证,并且客户端用户的身份对协议是可用的。

使用脚本处理SFTP始终可以得到支持,特别是当我们使用Python这样的编程语言时。Python提供了 pysftp 模块,可以轻松高效地处理这种技术。

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

那么,让我们开始吧。

理解Python pysftp模块

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

pysftp 模块作为 Paramiko 的包装器,具有更具Python风格的接口。Paramiko库是一个很棒的Python库,被认为是 pysftp 的基础。由 pysftp 创建的方法是抽象的,通过封装与SFTP交互的各种高级功能用例,提高了程序员的生产力。我们无需编写脚本来遍历目录并调用get和put,同时处理不仅是Paramiko,还包括Python的OS和stat模块,并编写测试(互联网上的许多代码片段都是不完整的,不考虑边界情况)。 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服务器

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

然后,我们需要使用 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服务器。

使用Python的pysftp上传文件

我们可以使用 pysftp 和SFTP客户端的 sftp.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() 函数将文件上传到服务器。

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

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

我们可以通过打开一个连接,从 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 模块的官方文档。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程