gpt4 book ai didi

python - 如何在Python中通过SFTP连接后列出目录中的所有文件夹和文件

转载 作者:太空狗 更新时间:2023-10-29 17:19:16 28 4
gpt4 key购买 nike

我正在使用 Python 并尝试连接到 SFTP,并希望从那里检索一个 XML 文件并需要将其放在我的本地系统中。下面是代码:

import paramiko

sftpURL = 'sftp.somewebsite.com'
sftpUser = 'user_name'
sftpPass = 'password'

ssh = paramiko.SSHClient()
# automatically add keys without requiring human intervention
ssh.set_missing_host_key_policy( paramiko.AutoAddPolicy() )

ssh.connect(sftpURL, username=sftpUser, password=sftpPass)

ftp = ssh.open_sftp()
files = ftp.listdir()
print files

这里连接成功。现在我想查看所有文件夹和所有文件,并且需要进入所需的文件夹以从那里检索 XML 文件。

最后我的目的是在连接到 SFTP 服务器后查看所有文件夹和文件。

在上面的代码中,我使用了 ftp.listdir(),通过它我得到了如下所示的输出

['.bash_logout', '.bash_profile', '.bashrc', '.mozilla', 'testfile_248.xml']

我想知道是否只有这些文件存在?

我上面使用的命令也可以查看文件夹吗?

查看所有文件夹和文件的命令是什么?

最佳答案

SFTPClient.listdir返回所有内容、文件和文件夹。

如果有文件夹,要从文件中分辨出来,使用 SFTPClient.listdir_attr反而。它返回 SFTPAttributes 的集合.

from stat import S_ISDIR, S_ISREG
sftp = ssh.open_sftp()

for entry in sftp.listdir_attr(remotedir):
mode = entry.st_mode
if S_ISDIR(mode):
print(entry.filename + " is folder")
elif S_ISREG(mode):
print(entry.filename + " is file")

@Oz123 接受的答案效率低下。 SFTPClient.listdir 在内部调用 SFTPClient.listdir_attr 并丢弃大部分信息,仅返回文件和文件夹名称。然后,答案会通过为每个文件调用 SFTPClient.lstat 来无用且费力地重新检索所有数据。

另见 How to fetch sizes of all SFTP files in a directory through Paramiko .


强制性警告:请勿使用 AutoAddPolicy – 您正在失去针对 MITM attacks 的保护通过这样做。有关正确的解决方案,请参阅 Paramiko "Unknown Server"

关于python - 如何在Python中通过SFTP连接后列出目录中的所有文件夹和文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12295551/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com