使用 Paramiko 将具有特定扩展名的本地文件夹中的所有文件上传到 SFTP 服务器
Upload all files from local folder with specific extension to SFTP server using Paramiko
我正在使用 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')
我在 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
returns 文件名,所以你必须在调用 SFTPClient.put
.
时将它们与 source
结合起来
同样SFTPClient.put
的remotepath
参数也必须是一个完整的文件路径。
您不想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()
有关递归上传,请参阅:
我正在使用 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')
我在 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
returns 文件名,所以你必须在调用SFTPClient.put
.source
结合起来同样
SFTPClient.put
的remotepath
参数也必须是一个完整的文件路径。您不想
之后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()
有关递归上传,请参阅: