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之eval()函数危险性浅析
Jul 03 Python
使用 Python 获取 Linux 系统信息的代码
Jul 13 Python
Python中的anydbm模版和shelve模版使用指南
Jul 09 Python
python实现用户登录系统
May 21 Python
Python日期的加减等操作的示例
Aug 15 Python
Python探索之实现一个简单的HTTP服务器
Oct 28 Python
用不到50行的Python代码构建最小的区块链
Nov 16 Python
python通过百度地图API获取某地址的经纬度详解
Jan 28 Python
python如何求解两数的最大公约数
Sep 27 Python
Python关于excel和shp的使用在matplotlib
Jan 03 Python
Python Sympy计算梯度、散度和旋度的实例
Dec 06 Python
pytorch 运行一段时间后出现GPU OOM的问题
Jun 02 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
神族 Protoss 历史背景
2020/03/14 星际争霸
有关 PHP 和 MySQL 时区的一点总结
2008/03/26 PHP
使用openssl实现rsa非对称加密算法示例
2014/01/24 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
destoon调用discuz论坛中带图片帖子的实现方法
2014/08/21 PHP
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
js监听键盘事件示例代码
2013/07/26 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
jsp 网站引入外部css或者js失效问题解决
2016/10/31 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
React Native中的RefreshContorl下拉刷新使用
2017/10/09 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
2019/10/30 Javascript
vue中在vuex的actions中请求数据实例
2019/11/08 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
python读取csv文件示例(python操作csv)
2014/03/11 Python
实例讲解Python中的私有属性
2014/08/21 Python
Python简单实现socket信息发送与监听功能示例
2018/01/03 Python
详解爬虫被封的问题
2019/04/23 Python
Python爬虫实现验证码登录代码实例
2019/05/10 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
python3.7+selenium模拟淘宝登录功能的实现
2020/05/26 Python
python安装sklearn模块的方法详解
2020/11/28 Python
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
Trina Turk官网:美国时装和泳装品牌
2018/06/10 全球购物
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
公司担保书格式范文
2014/05/12 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书