环境
Python-3.8
Windows 64位
安装必要的库
首先,确保已经安装了以下库:
#有网安装方式:
pip install paramiko
#离线安装方式:
pip install bcrypt-3.1.7-cp38-cp38-win_amd64.whl
pip install cryptography-2.9-cp38-cp38-win_amd64.whl
pip install PyNaCl-1.3.0-cp38-cp38-win_amd64.whl
pip install paramiko-2.9.5-py2.py3-none-any.whl
代码实现
python">import os # 引入os模块
import paramiko # 引入paramiko代码
from stat import S_ISDIR
import base64 # 引入base64模块# base64加密
def b64_encode(password):password = password.encode("utf-8")return base64.b64encode(password)# base64 解密
def b64_decode(password):return base64.b64decode(password)def isdir(sftp, dirPath):try:return S_ISDIR(sftp.stat(dirPath).st_mode)except IOError:return Falsedef rm(sftp, path):files = sftp.listdir(path)for f in files:filepath = path + '/' + fprint("删除已存在文件: " + filepath)if isdir(sftp,filepath):rm(filepath)else:sftp.remove(filepath)sftp.rmdir(path)path = 'D:/Temp/en/20221114' # 赋值路径
pathDate = path.split("/")[-1]
sftpPath = os.path.join('/home/app_adm/tmp/sftp/', pathDate)
print(sftpPath)
mylist = os.listdir(path) # 赋值列表(列表的索引从0开始)pw=b64_decode('**********')
transport = paramiko.Transport(('********', 22)) # 打开通道
transport.connect(username='infra_adm', password=pw) # 开始连接
sftp = paramiko.SFTPClient.from_transport(transport) # 打开sftp客户端try:print("开始创建目录:" + sftpPath)sftp.stat(sftpPath)rm(sftp, sftpPath)sftp.mkdir(sftpPath, mode=0o775)
except FileNotFoundError:# 目录不存在,创建目录sftp.mkdir(sftpPath, mode=0o775)count = 0 # 用来计数
while count < len(mylist): # 如果列表里有多个值 则一一循环print("正在传输:" + mylist[count]) # 循环开始时打印正在传输的文件名fullPath = path + '/' + mylist[count]sftpFullPath = sftpPath + '/' + mylist[count]# print(fullPath)# print(sftpFullPath)sftp.put(fullPath, sftpFullPath)print(mylist[count] + '传输完成') # 传输完成后打印传输完成的文件名count = count + 1 # 每次上传完一个文件计数+1
transport.close() # 当传输结束之后关闭通道