我正在使用 paramiko 将文件上传到 SFTP 服务器。我想传输文件夹中的所有文件。文件的名称是这样的one.txt
, two.txt
......我希望文件按顺序发送one.txt
then two.txt
then 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')
I have files in b/
:
但脚本的输出是:
no txt file found
no txt file found
no txt file found
您的代码永远不会读取本地目录。你的for
循环迭代人物 in the '/home/netcs/b/'
string, not files in the /home/netcs/b/
folder.
-
要列出文件夹中的文件,请使用os.listdir
:
如何列出目录中的所有文件?
还有os.listdir
仅返回文件名,因此您必须将它们与source
打电话时SFTPClient.put
.
-
同样地remotepath
的论证SFTPClient.put
还必须是完整的文件路径。
-
你不想break
在第一个找到的文件之后
-
另一个问题是print('No txt file found')
放错地方了。您将打印它every没有的文件.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 无法在 Windows 上运行
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)