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 相关文章推荐
仅用50行Python代码实现一个简单的代理服务器
Apr 08 Python
python使用socket进行简单网络连接的方法
Apr 29 Python
Python xlwt设置excel单元格字体及格式
Apr 18 Python
Python中对数组集进行按行打乱shuffle的方法
Nov 08 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
pycharm 实现显示project 选项卡的方法
Jan 17 Python
对python 多线程中的守护线程与join的用法详解
Feb 18 Python
python破解bilibili滑动验证码登录功能
Sep 11 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
Mar 30 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
Nov 05 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 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
PHP中一个控制字符串输出的函数
2006/10/09 PHP
PHP图片上传类带图片显示
2006/11/25 PHP
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
JS实现网页标题随机显示名人名言的方法
2015/11/03 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
原生js轮播特效
2017/05/18 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
VSCode 配置React Native开发环境的方法
2017/12/27 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
js this 绑定机制深入详解
2020/04/30 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 大神专访第二弹!
2014/05/20 DOTA
Python脚本实现格式化css文件
2015/04/08 Python
python rsa 加密解密
2017/03/20 Python
python矩阵/字典实现最短路径算法
2019/01/17 Python
Python minidom模块用法示例【DOM写入和解析XML】
2019/03/25 Python
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
办公室岗位职责
2014/02/12 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
授权委托书格式
2014/07/31 职场文书
民主生活会整改措施(党员)
2014/09/18 职场文书
Promise面试题详解之控制并发
2021/05/14 面试题
Pytorch可视化的几种实现方法
2021/06/10 Python
【海涛dota解说】海涛小满开黑4v5被破两路翻盘潮汐第一视角解说
2022/04/01 DOTA