基于Python——实现远程下载sftp文件(只下载.zip文件)
【背景】远程下载发布包等文件时,总是要使用WinSCP等工具登陆拖动。今天就介绍一种使用python下载文件到本地的方法。
【代码实现】
1 import paramiko # paramiko模块,基于SSH用于连接远程服务器并执行相关操作 2 import os 3 4 5 def DownLoadFile(sftp, LocalFile, RemoteFile): # 下载单个文件 7 file_handler = open(LocalFile, 'wb') # wb 以二进制格式打开文件写入 8 print(file_handler) 9 sftp.get(RemoteFile, LocalFile) # 下载目录中文件 10 file_handler.close() 11 return True 12 13 14 def DownLoadFileTree(sftp, LocalDir, RemoteDir): # 下载整个目录下的文件 15 if not os.path.exists(LocalDir): # 如果本地文件夹不存在,则创建它 16 os.makedirs(LocalDir) 17 for file in sftp.listdir(RemoteDir): #sftp.listdir()返回当前目录下清单列表 18 Local = os.path.join(LocalDir, file) #os.path.join()用于拼接文件路径 19 Remote = os.path.join(RemoteDir, file) 20 if os.path.isdir(file): # 判断是否是文件 21 if not os.path.exists(Local): #对于文件夹:如果本地不存在,就创建该文件夹 22 os.makedirs(Local) 23 DownLoadFileTree(sftp, Local, Remote) 24 else: # 是文件 25 if os.path.splitext(Remote)[1] == '.zip': #os.path.splitext(Remote)[1]获取文件扩展名,判断是否为.zip文件 26 DownLoadFile(sftp, Local, Remote) #下载文件 27 print "complete!"
1 if __name__ == '__main__': 2 host = '主机名' # 主机 3 port = 端口号# 端口 4 username = '用户名' # 用户名 5 password = '密码' # 密码 6 client = paramiko.Transport((host, port)) #连接服务器 7 client.connect(username=username, password=password) 8 sftp = paramiko.SFTPClient.from_transport(client) 9 local = raw_input("please input the local path(eg.D:\\V1.6):") #输入本地文件路径 10 remote = '/app/...' # 远程文件或目录 11 DownLoadFileTree(sftp, local, remote) # 下载
代码实现了远程连接服务器,输入本地路径,就会自动下载需要的压缩文件,比可视化工具更快捷。