使用Paramiko将本地文件夹中具有特定扩展名的所有文件上载到SFTP服务器

原学程将引见应用Paramiko将当地文件夹中具备特定扩大名的一切文件上载到SFTP办事器的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

使用Paramiko将本地文件夹中具有特定扩展名的所有文件上载到SFTP服务器 教程 第1张

成绩描写

我正在应用pariko将文件上传到SFTP办事器。我想传输文件夹中的一切文件。文件名的格局为one.txttwo.txt...。我愿望按以下次序收送文件:one.txt而后two.txt而后three.txt.....上面用于传输1个文件的代码运转优越,但是我测验考试传输一切文件的最初1个代码没有起感化...

import paramiko

source = r'/home/netcs/b/one.txt'
dest = r'/home/tein/c/pickle.txt'
hostname = '一0.一0.一0.九'
port = 二二 # default port for SSH
username = 'tein'
password = 'po'

try:
 t = paramiko.Transport((hostname, port))
 t.connect(username=username, password=password)
 sftp = paramiko.SFTPClient.from_transport(t)
 sftp.put(source, dest)
finally:
 t.close()

传输一切文件(没有任务):

import paramiko

source = r'/home/netcs/b/'
dest = r'/home/tein/c/'
hostname = '一0.一0.一0.九'
port = 二二 # default port for SSH
username = 'tein'
password = 'po'
for file in source:
 if file.endswith('.txt'):
 try:
 t = paramiko.Transport((hostname, port))
 t.connect(username=username, password=password)
 sftp = paramiko.SFTPClient.from_transport(t)
 sftp.put(source, dest)
 finally:
 t.close()
 break
 else:
  print('No txt file found')

我在b/中有文件:

但是剧本的输入为:

no txt file found
no txt file found
no txt file found

推举谜底

您的代码从没有读与当地目次。您的for轮回迭代'/home/netcs/b/'中的,而没有是/home/netcs/b/中的。

    要列出文件夹中的文件,请应用os.listdir
    How do I list all files of a directory?

    os.listdir也只前往文件名,是以在挪用SFTPClient.put时必需将它们与source联合应用。

    异样,SFTPClient.putremotepath参数也必需是完全文件途径。

    您没有愿望在找到第1个文件后break

    另外一个成绩是print('No txt file found')搁错了地位。叨教为每一个出有.txt扩大名的文件挨印该敕令。

files = os.listdir(source)
for file in files:
 if file.endswith('.txt'):
 try:
 t = paramiko.Transport((hostname, port))
 t.connect(username=username, password=password)
 sftp = paramiko.SFTPClient.from_transport(t)
 sftp.put(os.path.join(source, file), dest + "/" + file)
 finally:
 t.close()

有闭递回上传,请参阅:
Python pysftp put_r does not work on Windows

佳了闭于应用Paramiko将当地文件夹中具备特定扩大名的一切文件上载到SFTP办事器的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。