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 MySQLdb模块连接操作mysql数据库实例
Apr 08 Python
老生常谈Python进阶之装饰器
May 11 Python
pandas每次多Sheet写入文件的方法
Dec 10 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
pytorch实现mnist数据集的图像可视化及保存
Jan 14 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
Feb 11 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
Mar 28 Python
利用python绘制数据曲线图的实现
Apr 09 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
Keras中 ImageDataGenerator函数的参数用法
Jul 03 Python
python 用递归实现通用爬虫解析器
Apr 16 Python
Python实现视频中添加音频工具详解
Dec 06 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
虹吸壶煮咖啡26个注意事项
2021/03/03 冲泡冲煮
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
js动态为代码着色显示行号
2013/05/29 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
jQuery多条件筛选如何实现
2015/11/04 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
JavaScript基础之流程控制语句的用法
2017/08/31 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
Thinkjs3新手入门之如何使用静态资源目录
2017/12/06 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
一次让你了解全部JavaScript的作用域
2019/06/24 Javascript
解决layui的form里的元素进行动态生成,验证失效的问题
2019/09/14 Javascript
Python version 2.7 required, which was not found in the registry
2014/08/26 Python
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
详解Python3中字符串中的数字提取方法
2017/01/14 Python
Python导入模块时遇到的错误分析
2017/08/30 Python
TensorFlow神经网络优化策略学习
2018/03/09 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
Python读取stdin方法实例
2019/05/24 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
APM Monaco中国官网:来自摩纳哥珠宝品牌
2017/12/27 全球购物
社会实践感言
2014/01/25 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
给老婆道歉的话
2015/01/20 职场文书
2016党校学习心得体会
2016/01/07 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
Go并发4种方法简明讲解
2022/04/06 Golang