Python使用paramiko通过SFTP实现文件上传与下载

青禾
青禾
发布时间:2026-10-14 | 4人浏览过
原创

本文介绍如何利用Python的paramiko模块,通过SFTP协议实现远程主机的文件与目录上传及下载功能。代码涵盖单文件、批量目录传输逻辑,包含路径类型判断、异常处理及本地远程路径一致性校验,适用于Windows与Linux环境下的自动化运维场景。

在Python开发中,借助paramiko库提供的SFTP功能,可以便捷地登录远程主机,从而完成文件的上传与下载操作。

1.功能实现

实现逻辑主要包含以下几点: 1、依据输入参数判断目标为文件还是目录,分别执行上传或下载操作。 2、本地路径参数local与远程路径参数remote的类型必须保持一致:若为文件,路径以文件名结尾;若为目录,路径以反斜杠\结尾。 3、执行操作前,需确保本地目录与远程目录均已存在。 4、代码中包含完整的异常捕获机制,以处理可能的传输错误。

2.代码实现


#!/usr/bin/python
# coding=utf-8

import paramiko
import os

def sftp_upload(host,port,username,password,local,remote):
    sf = paramiko.Transport((host,port))
    sf.connect(username = username,password = password)
    sftp = paramiko.SFTPClient.from_transport(sf)
    try:
        if os.path.isdir(local):#判断本地参数是目录还是文件
            for f in os.listdir(local):#遍历本地目录
                sftp.put(os.path.join(local+f),os.path.join(remote+f))#上传目录中的文件
        else:
            sftp.put(local,remote)#上传文件
    except Exception,e:
        print('upload exception:',e)
    sf.close()

def sftp_download(host,port,username,password,local,remote):
    sf = paramiko.Transport((host,port))
    sf.connect(username = username,password = password)
    sftp = paramiko.SFTPClient.from_transport(sf)
    try:
        if os.path.isdir(local):#判断本地参数是目录还是文件
            for f in sftp.listdir(remote):#遍历远程目录
                 sftp.get(os.path.join(remote+f),os.path.join(local+f))#下载目录中文件
        else:
            sftp.get(remote,local)#下载文件
    except Exception,e:
        print('download exception:',e)
    sf.close()

if __name__ == '__main__':
    host = '192.168.1.2'#主机
    port = 22 #端口
    username = 'root' #用户名
    password = '123456' #密码
    local = 'F:\\sftptest\\'#本地文件或目录,与远程一致,当前为windows目录格式,window目录中间需要使用双斜线
    remote = '/opt/tianpy5/python/test/'#远程文件或目录,与本地一致,当前为linux目录格式
    sftp_upload(host,port,username,password,local,remote)#上传
    #sftp_download(host,port,username,password,local,remote)#下载

3.总结

上述代码实现了文件及目录的上传与下载功能,支持单独传输单个文件,也支持批量传输目录下的所有文件,基本满足了日常使用需求。不过,针对目录不存在时自动创建的情况,以及向多台主机同时上传下载的场景,代码仍有待进一步完善。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表