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 相关文章推荐
Python中zip()函数用法实例教程
Jul 31 Python
Python socket C/S结构的聊天室应用实现
Nov 30 Python
bpython 功能强大的Python shell
Feb 16 Python
Python实现代码统计工具(终极篇)
Jul 04 Python
python+pandas分析nginx日志的实例
Apr 28 Python
Python除法之传统除法、Floor除法及真除法实例详解
May 23 Python
Django框架安装方法图文详解
Nov 04 Python
使用Python的Turtle绘制哆啦A梦实例
Nov 21 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
Dec 27 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 Python
Python wordcloud库安装方法总结
Dec 31 Python
教你用python实现一个无界面的小型图书管理系统
May 21 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
NOD32 v2.70.32 简体中文封装版 提供下载了
2007/02/27 PHP
php中Socket创建与监听实现方法
2015/01/05 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
2018/08/15 PHP
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
2013/05/07 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
2014/08/22 Javascript
jquery移动点击的项目到列表最顶端的方法
2015/06/24 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
vue 中swiper的使用教程
2018/05/22 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
VsCode与Node.js知识点详解
2019/09/05 Javascript
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
详细分析python3的reduce函数
2017/12/05 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
2018/07/26 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
Pytorch 数据加载与数据预处理方式
2019/12/31 Python
使用jTopo给Html5 Canva中绘制的元素添加鼠标事件
2014/05/15 HTML / CSS
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
德国购买健身器材:AsVIVA
2017/08/09 全球购物
二年级班级文化建设方案
2014/05/10 职场文书
国际贸易系求职信
2014/08/09 职场文书
国防教育标语
2014/10/08 职场文书
营业用房租赁协议书
2014/11/26 职场文书
三年级上册科学教学计划
2015/01/21 职场文书
校运会班级霸气口号
2015/12/24 职场文书
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers