Python教程-Python pysftp 模块
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的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服务器
我们可以使用 pysftp 模块在Python中列出目录的内容。为了实现这个目标,我们需要主机名、用户名和密码。
然后,我们必须使用 chdir 或 cwd 方法切换目录,并将第一个参数作为远程目录提供。
让我们考虑以下相同的示例。
示例:
# 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中上传文件
我们可以使用 pysftp 的 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_Path 和 remote_File_Path。
- local_File_Path: 这个文件路径是本地文件的路径。
- 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_Path 和 local_File_Path。
- remote_File_Path: 这个文件路径是文件所在的路径。
- 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 模块的官方文档。