Python使用paramiko通过SFTP实现文件上传与下载
本文介绍如何利用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.总结
上述代码实现了文件及目录的上传与下载功能,支持单独传输单个文件,也支持批量传输目录下的所有文件,基本满足了日常使用需求。不过,针对目录不存在时自动创建的情况,以及向多台主机同时上传下载的场景,代码仍有待进一步完善。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









