Python使用sftp实现上传和下载功能(实例代码)


Posted in Python onMarch 14, 2017

在Python中可以使用paramiko模块中的sftp登陆远程主机,实现上传和下载功能。

1.功能实现

根据输入参数判断是文件还是目录,进行上传和下载

本地参数local需要与远程参数remote类型一致,文件以文件名结尾,目录以\结尾

上传和下载的本地和远程目录需要存在

异常捕获

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 相关文章推荐
以Flask为例讲解Python的框架的使用方法
Apr 29 Python
python修改操作系统时间的方法
May 18 Python
python django 访问静态文件出现404或500错误
Jan 20 Python
基于python 处理中文路径的终极解决方法
Apr 12 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
Oct 11 Python
python生成九宫格图片
Nov 19 Python
在python 不同时区之间的差值与转换方法
Jan 14 Python
python实现一个函数版的名片管理系统过程解析
Aug 27 Python
如何给Python代码进行加密
Jan 10 Python
keras 自定义loss层+接受输入实例
Jun 28 Python
python实现无边框进度条的实例代码
Dec 30 Python
Python上下文管理器Content Manager
Jun 26 Python
Python实现Youku视频批量下载功能
Mar 14 #Python
Python实现视频下载功能
Mar 14 #Python
python 实现自动远程登陆scp文件实例代码
Mar 13 #Python
python executemany的使用及注意事项
Mar 13 #Python
Python的标准模块包json详解
Mar 13 #Python
python中pandas.DataFrame排除特定行方法示例
Mar 12 #Python
Python中functools模块函数解析
Mar 12 #Python
You might like
discuz的php防止sql注入函数
2011/01/17 PHP
PHP中extract()函数的定义和用法
2012/08/17 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
PHP中如何判断exec函数执行成功?
2016/08/04 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
javascript 树控件 比较好用
2009/06/11 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
JavaScript中number转换成string介绍
2014/12/31 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
解决给dom元素绑定click等事件无效问题的方法
2017/02/17 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
使用vue实现多规格选择实例(SKU)
2019/08/23 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
2020/10/31 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
python中字典dict常用操作方法实例总结
2015/04/04 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
Python创建文件夹与文件的快捷方法
2020/12/08 Python
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
品恩科技软件测试面试题
2014/10/26 面试题
数控专业个人求职信范例
2013/11/29 职场文书
工程业务员工作职责
2013/12/07 职场文书
自我介绍演讲稿
2014/01/15 职场文书
销售提升方案
2014/06/07 职场文书
医学检验专业自荐信
2014/09/18 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
催款函范文
2015/06/24 职场文书
oracle delete误删除表数据后如何恢复
2022/06/28 Oracle