如何解决使用 Paramiko 将具有特定扩展名的本地文件夹中的所有文件上传到 SFTP 服务器
我正在使用 paramiko 将文件上传到 SFTP 服务器。我想传输文件夹中的所有文件。文件名以 one.txt
,two.txt
.... 的方式命名。我希望文件按顺序发送,如 one.txt
然后 two.txt
然后 three.txt
.....以下用于传输一个文件的代码运行良好,但我尝试过的最后一个代码传输所有文件不起作用....
import paramiko
source = r'/home/netcs/b/one.txt'
dest = r'/home/tein/c/pickle.txt'
hostname = '10.10.10.9'
port = 22 # 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 = '10.10.10.9'
port = 22 # 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')
但是脚本的输出是:
no txt file found
no txt file found
no txt file found
解决方法
您的代码从不读取本地目录。您的 for
循环迭代 '/home/netcs/b/'
string 中的 characters,而不是 /home/netcs/b/
中的 files >文件夹。
-
要列出文件夹中的文件,请使用
os.listdir
:
How do I list all files of a directory?此外,
os.listdir
仅返回文件名,因此您必须在调用source
时将它们与SFTPClient.put
结合起来。 -
同样,
remotepath
的SFTPClient.put
参数也必须是完整的文件路径。 -
您不想在第一个找到的文件之后
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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。