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 相关文章推荐
解决pyqt中ui编译成窗体.py中文乱码的问题
Dec 23 Python
python opencv 直方图反向投影的方法
Feb 24 Python
Python 中的lambda函数介绍
Oct 10 Python
基于python实现学生管理系统
Oct 17 Python
对Django url的几种使用方式详解
Aug 06 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 Python
python将print输出的信息保留到日志文件中
Sep 27 Python
学习Python列表的基础知识汇总
Mar 10 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
May 09 Python
Python必须了解的35个关键词
Jul 16 Python
python利用proxybroker构建爬虫免费IP代理池的实现
Feb 21 Python
python实现批量提取指定文件夹下同类型文件
Apr 05 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
PHP4实际应用经验篇(1)
2006/10/09 PHP
用PHP中的 == 运算符进行字符串比较
2006/11/26 PHP
用缓存实现静态页面的测试
2006/12/06 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
Javascript的并行运算实现代码
2010/11/19 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
JavaScript检测并限制复选框选中个数的方法
2015/08/12 Javascript
JavaScript中利用各种循环进行遍历的方式总结
2015/11/10 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
基于jquery编写分页插件
2016/03/07 Javascript
jQuery的Read()方法代替原生JS详解
2016/11/08 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
vue内置指令详解
2018/04/03 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
javascript实现贪吃蛇经典游戏
2020/04/10 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
详细解读Python中的__init__()方法
2015/05/02 Python
python 读取DICOM头文件的实例
2018/05/07 Python
详解Python字典的操作
2019/03/04 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
如何使用Python 打印各种三角形
2019/06/28 Python
Python换行与不换行的输出实例
2020/02/19 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
英国最大的正宗复古足球衫制造商和零售商:TOFFS
2018/06/21 全球购物
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
市场营销专业毕业生求职信
2014/07/21 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
佛光寺导游词
2015/02/10 职场文书
2016中秋节问候语
2015/11/11 职场文书
《普罗米修斯》教学反思
2016/02/22 职场文书
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis