Python使用sftp实现传文件夹和文件

yizhihongxing

当我们需要将本地的文件或文件夹上传到远程服务器中时,可以使用sftp协议实现。下面是Python使用sftp实现传文件夹和文件的完整攻略。

安装paramiko库

paramiko是Python中的一款SSH客户端,可以方便地实现ssh和sftp协议的连接,进行文件传输。我们需要先安装paramiko库。

pip install paramiko

连接服务器

我们需要通过paramiko库创建一个ssh连接,通过这个连接来进行文件传输。下面是连接服务器的示例代码。

import paramiko

# 建立ssh连接
transport = paramiko.Transport(('hostname', port))
transport.connect(username='username', password='password')

# 创建sftp实例
sftp = paramiko.SFTPClient.from_transport(transport)

# 关闭连接
transport.close()

其中,hostname是服务器的IP地址或域名,port是ssh服务器的端口号,默认是22。username是登录服务器的用户名,password是密码,如果使用密钥登录的话,则需要使用paramiko.RSAKey.from_private_key_file(key_filename)来加载私钥文件。

上传文件

上传文件的过程非常简单,只需要使用sftp.put()方法,传入本地文件路径和远程服务器的文件路径即可。下面是上传文件的示例代码。

import paramiko

# 建立ssh连接
transport = paramiko.Transport(('hostname', port))
transport.connect(username='username', password='password')

# 创建sftp实例
sftp = paramiko.SFTPClient.from_transport(transport)

# 上传文件
sftp.put(local_path, remote_path)

# 关闭连接
transport.close()

其中,local_path是本地文件的路径,remote_path是远程服务器上的文件路径。

上传文件夹

上传文件夹需要用到递归函数,递归地将文件夹中的所有文件都上传到远程服务器上。下面是上传文件夹的示例代码。

import os
import paramiko

# 建立ssh连接
transport = paramiko.Transport(('hostname', port))
transport.connect(username='username', password='password')

# 创建sftp实例
sftp = paramiko.SFTPClient.from_transport(transport)

def upload(local_path, remote_path):
    """
    上传文件夹或文件到远程服务器
    """
    if os.path.isfile(local_path):
        # 是文件
        sftp.put(local_path, remote_path)
    else:
        # 是文件夹
        try:
            sftp.stat(remote_path)
        except FileNotFoundError:
            sftp.mkdir(remote_path)
        for file in os.listdir(local_path):
            sub_local_path = os.path.join(local_path, file)
            sub_remote_path = os.path.join(remote_path, file)
            upload(sub_local_path, sub_remote_path)

upload(local_path, remote_path)

# 关闭连接
transport.close()

其中,os.path.isfile(local_path)用于判断当前路径是否是文件,若是,则使用sftp.put()方法上传文件,若不是,则遍历文件夹中的所有文件,递归上传。

示例说明

示例1: 上传单个文件

假设我们要上传本地的/home/user/test.txt文件到远程服务器的/data/test.txt路径下。代码如下:

import paramiko

# 建立ssh连接
transport = paramiko.Transport(('192.168.1.100', 22))
transport.connect(username='root', password='password')

# 创建sftp实例
sftp = paramiko.SFTPClient.from_transport(transport)

# 上传文件
sftp.put('/home/user/test.txt', '/data/test.txt')

# 关闭连接
transport.close()

运行代码后,test.txt文件将被上传到远程服务器的/data/test.txt路径下。

示例2: 上传文件夹

假设我们要上传/home/user/folder文件夹下的所有文件到远程服务器的/data/folder路径下。代码如下:

import os
import paramiko

# 建立ssh连接
transport = paramiko.Transport(('192.168.1.100', 22))
transport.connect(username='root', password='password')

# 创建sftp实例
sftp = paramiko.SFTPClient.from_transport(transport)

def upload(local_path, remote_path):
    """
    上传文件夹或文件到远程服务器
    """
    if os.path.isfile(local_path):
        # 是文件
        sftp.put(local_path, remote_path)
    else:
        # 是文件夹
        try:
            sftp.stat(remote_path)
        except FileNotFoundError:
            sftp.mkdir(remote_path)
        for file in os.listdir(local_path):
            sub_local_path = os.path.join(local_path, file)
            sub_remote_path = os.path.join(remote_path, file)
            upload(sub_local_path, sub_remote_path)

upload('/home/user/folder', '/data/folder')

# 关闭连接
transport.close()

运行代码后,/home/user/folder文件夹下的所有文件都将被上传到远程服务器的/data/folder路径下。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python使用sftp实现传文件夹和文件 - Python技术站

(0)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • 浅谈Python 命令行参数argparse写入图片路径操作

    我们来详细讲解一下“浅谈Python 命令行参数argparse写入图片路径操作”的完整攻略。 介绍 Python是一种易于学习和使用的编程语言,广泛用于Web开发、科学计算、人工智能等领域。命令行参数是每个需要进行交互的程序都必须考虑的问题。Python中提供了argparse模块,可以轻松地解析命令行参数,使得程序更简洁、易于使用。 在本文中,我们将会通…

    python 2023年6月3日
    00
  • 如何在Python中使用pyodbc库连接Oracle数据库?

    在Python中,我们可以使用pyodbc库连接Oracle数据库。pyodbc是一个Python模块,它提供了一个统一的API来连接各种数据库。以下是如何在Python中使用pyodbc库连接Oracle数据库的完整使用攻略,包括安装odbc库、连接Oracle数据库、执行SQL语句等步骤。同时,提供两个示例以便更好理解如何在Python使用pyod库连接…

    python 2023年5月12日
    00
  • 用Python自动清理电脑内重复文件,只要10行代码(自动脚本)

    下面是详细讲解如何使用Python自动清理电脑内重复文件的完整攻略。 目录 确认要去重的文件夹 遍历文件夹并计算hash 筛选出重复文件 删除重复文件 1. 确认要去重的文件夹 首先,我们需要确认要去重的文件夹路径,这可以使用Python中的os库来实现。可以使用以下代码来获取文件夹路径: import os folder_path = r’C:\Users…

    python 2023年5月19日
    00
  • Python float函数实例用法

    Python float函数实例用法 Python中的float()函数用于将其他数据类型转换为浮点数类型。在实际的数据处理中,浮点数类型通常用于表示非整数的数量或者量度指标。 基本语法 float([x]) 其中,x表示要转换成浮点数的值。如果不提供任何参数,则返回0.0。 示例说明 示例1:基本用法 x = 6 y = 4 result = float(…

    python 2023年5月18日
    00
  • Python使用scrapy采集时伪装成HTTP/1.1的方法

    在使用Scrapy进行网页爬取时,为了避免被网站封禁,我们需要伪装成浏览器发送HTTP请求。其中一种方法是伪装成HTTP/1.1协议,本文将详细介绍如何实现这种装。 伪装成HTTP/1.1协议 在Scrapy中,我们可以在settings.py文件中设置USER_AGENT和DEFAULT_REQUEST_HEADERS来伪装成HTTP/1.1协议。具体步骤…

    python 2023年5月14日
    00
  • Python项目打包成exe文件

    为将Python项目打包成exe文件,可以使用PyInstaller等第三方打包工具,下面将介绍使用PyInstaller打包的步骤。 环境准备 安装PyInstaller pip install pyinstaller 进入需要打包成exe文件的Python项目目录 cd path/to/your/project 打包 在项目目录下运行以下命令,将项目打包…

    python 2023年6月2日
    00
  • python shell命令行中import多层目录下的模块操作

    要在 Python Shell 命令行中 import 多层目录下的模块,需要遵循以下步骤: 打开需要引用模块的目录 使用相对路径或绝对路径获取要引用的模块 使用 import 导入模块 下面分别使用相对路径和绝对路径的方式引入多层目录下的模块进行说明。 示例 1:使用相对路径 假设我们的项目结构如下所示: project/ ├── package1/ │ …

    python 2023年6月3日
    00
  • 在 Spark 2 解释器下使用 Python 和 Zeppelin

    【问题标题】:Using Python with Zeppelin under the Spark 2 Interpreter在 Spark 2 解释器下使用 Python 和 Zeppelin 【发布时间】:2023-04-04 11:32:01 【问题描述】: 我已经在虚拟机上部署了 HDP: 2.6.4 我可以看到 spark2 没有指向正确的 pyt…

    Python开发 2023年4月6日
    00
合作推广
合作推广
分享本页
返回顶部